Merge remote-tracking branch 'refs/remotes/misskey-original/develop' into develop

This commit is contained in:
mattyatea 2024-06-20 13:49:25 +09:00
commit 72aaffdd37
29 changed files with 256 additions and 136 deletions

View file

@ -29,7 +29,7 @@ function getChartArray(seed: string, limit: number, option?: { accumulate?: bool
return array;
}
function getChartResolver(fields: string[], option?: { accumulate?: boolean, mulMap?: Record<string, number> }): HttpResponseResolver<PathParams, DefaultBodyType, JsonBodyType> {
export function getChartResolver(fields: string[], option?: { accumulate?: boolean, mulMap?: Record<string, number> }): HttpResponseResolver<PathParams, DefaultBodyType, JsonBodyType> {
return ({ request }) => {
action(`GET ${request.url}`)();
const limitParam = new URL(request.url).searchParams.get('limit');
@ -76,6 +76,7 @@ const Base = {
args: {
src: 'federation',
span: 'hour',
nowForChromatic: 1716263640000,
},
parameters: {
layout: 'centered',
@ -100,18 +101,21 @@ const Base = {
export const FederationChart = {
...Base,
args: {
...Base.args,
src: 'federation',
},
} satisfies StoryObj<typeof MkChart>;
export const NotesTotalChart = {
...Base,
args: {
...Base.args,
src: 'notes-total',
},
} satisfies StoryObj<typeof MkChart>;
export const DriveChart = {
...Base,
args: {
...Base.args,
src: 'drive',
},
} satisfies StoryObj<typeof MkChart>;

View file

@ -77,6 +77,7 @@ const props = withDefaults(defineProps<{
stacked?: boolean;
bar?: boolean;
aspectRatio?: number | null;
nowForChromatic?: number;
}>(), {
args: undefined,
limit: 90,
@ -84,6 +85,13 @@ const props = withDefaults(defineProps<{
stacked: false,
bar: false,
aspectRatio: null,
/**
* @desc Overwrites current date to fix background lines of chart.
* @ignore Only used for Chromatic. Don't use this for production.
* @see https://github.com/misskey-dev/misskey/pull/13830#issuecomment-2155886151
*/
nowForChromatic: undefined,
});
const legendEl = shallowRef<InstanceType<typeof MkChartLegend>>();
@ -106,7 +114,8 @@ const getColor = (i) => {
return colorSets[i % colorSets.length];
};
const now = new Date();
// eslint-disable-next-line vue/no-setup-props-destructure
const now = props.nowForChromatic != null ? new Date(props.nowForChromatic) : new Date();
let chartInstance: Chart | null = null;
let chartData: {
series: {

View file

@ -0,0 +1,64 @@
/*
* SPDX-FileCopyrightText: syuilo and misskey-project
* SPDX-License-Identifier: AGPL-3.0-only
*/
/* eslint-disable @typescript-eslint/explicit-function-return-type */
import { StoryObj } from '@storybook/vue3';
import { HttpResponse, http } from 'msw';
import { federationInstance } from '../../.storybook/fakes.js';
import { commonHandlers } from '../../.storybook/mocks.js';
import MkInstanceCardMini from './MkInstanceCardMini.vue';
import { getChartResolver } from './MkChart.stories.impl.js';
export const Default = {
render(args) {
return {
components: {
MkInstanceCardMini,
},
setup() {
return {
args,
};
},
computed: {
props() {
return {
...this.args,
};
},
},
template: '<MkInstanceCardMini v-bind="props" />',
};
},
args: {
instance: federationInstance(),
},
parameters: {
layout: 'centered',
msw: {
handlers: [
...commonHandlers,
http.get('/undefined/preview.webp', async ({ request }) => {
const urlStr = new URL(request.url).searchParams.get('url');
if (urlStr == null) {
return new HttpResponse(null, { status: 404 });
}
const url = new URL(urlStr);
if (url.href.startsWith('https://github.com/misskey-dev/misskey/blob/master/packages/frontend/assets/')) {
const image = await (await fetch(`client-assets/${url.pathname.split('/').pop()}`)).blob();
return new HttpResponse(image, {
headers: {
'Content-Type': 'image/jpeg',
},
});
} else {
return new HttpResponse(null, { status: 404 });
}
}),
http.get('/api/charts/instance', getChartResolver(['requests.received'])),
],
},
},
} satisfies StoryObj<typeof MkInstanceCardMini>;

View file

@ -29,8 +29,8 @@ const chartValues = ref<number[] | null>(null);
misskeyApiGet('charts/instance', { host: props.instance.host, limit: 16 + 1, span: 'day' }).then(res => {
//
res['requests.received'].splice(0, 1);
chartValues.value = res['requests.received'];
res.requests.received.splice(0, 1);
chartValues.value = res.requests.received;
});
function getInstanceIcon(instance): string {

View file

@ -109,6 +109,15 @@ definePageMetadata(() => ({
</script>
<style lang="scss" module>
.fadeEnterActive,
.fadeLeaveActive {
transition: opacity 0.125s ease;
}
.fadeEnterFrom,
.fadeLeaveTo {
opacity: 0;
}
.announcement {
padding: 16px;
}