From 2b26a2f5e444faaba43e18487a42edd9c24400e6 Mon Sep 17 00:00:00 2001 From: syuilo <Syuilotan@yahoo.co.jp> Date: Thu, 11 May 2023 20:54:47 +0900 Subject: [PATCH] =?UTF-8?q?enhance(frontend):=20=E3=82=A2=E3=82=AB?= =?UTF-8?q?=E3=82=A6=E3=83=B3=E3=83=88=E5=88=9D=E6=9C=9F=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=E3=82=A6=E3=82=A3=E3=82=B6=E3=83=BC=E3=83=89=E3=81=AB=E3=83=97?= =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=83=90=E3=82=B7=E3=83=BC=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- locales/ja-JP.yml | 3 +- .../components/MkUserSetupDialog.Follow.vue | 4 -- .../MkUserSetupDialog.Privacy.stories.impl.ts | 31 +++++++++++ .../components/MkUserSetupDialog.Privacy.vue | 52 +++++++++++++++++++ .../components/MkUserSetupDialog.Profile.vue | 4 -- .../src/components/MkUserSetupDialog.vue | 38 ++++++++++++-- 6 files changed, 120 insertions(+), 12 deletions(-) create mode 100644 packages/frontend/src/components/MkUserSetupDialog.Privacy.stories.impl.ts create mode 100644 packages/frontend/src/components/MkUserSetupDialog.Privacy.vue diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 6908748c36..adff5c556d 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -689,7 +689,7 @@ no: "いいえ" driveFilesCount: "ドライブのファイル数" driveUsage: "ドライブ使用量" noCrawle: "クローラーによるインデックスを拒否" -noCrawleDescription: "検索エンジンにあなたのユーザーページ、ノート、Pagesなどのコンテンツを登録(インデックス)しないよう要請します。" +noCrawleDescription: "外部の検索エンジンにあなたのユーザーページ、ノート、Pagesなどのコンテンツを登録(インデックス)しないよう要求します。" lockedAccountInfo: "フォローを承認制にしても、ノートの公開範囲を「フォロワー」にしない限り、誰でもあなたのノートを見ることができます。" alwaysMarkSensitive: "デフォルトでメディアを閲覧注意にする" loadRawImages: "添付画像のサムネイルをオリジナル画質にする" @@ -1049,6 +1049,7 @@ _initialAccountSetting: letsStartAccountSetup: "アカウントの初期設定を行いましょう。" letsFillYourProfile: "まずはあなたのプロフィールを設定しましょう。" profileSetting: "プロフィール設定" + privacySetting: "プライバシー設定" theseSettingsCanEditLater: "これらの設定は後から変更できます。" youCanEditMoreSettingsInSettingsPageLater: "この他にも様々な設定を「設定」ページから行えます。ぜひ後で確認してみてください。" followUsers: "タイムラインを構築するため、気になるユーザーをフォローしてみましょう。" diff --git a/packages/frontend/src/components/MkUserSetupDialog.Follow.vue b/packages/frontend/src/components/MkUserSetupDialog.Follow.vue index b89e3e4c9d..a2a195cb09 100644 --- a/packages/frontend/src/components/MkUserSetupDialog.Follow.vue +++ b/packages/frontend/src/components/MkUserSetupDialog.Follow.vue @@ -40,10 +40,6 @@ import * as os from '@/os'; import { $i } from '@/account'; import MkPagination from '@/components/MkPagination.vue'; -const emit = defineEmits<{ - (ev: 'done'): void; -}>(); - const pinnedUsers = { endpoint: 'pinned-users', noPaging: true }; const popularUsers = { endpoint: 'users', limit: 10, noPaging: true, params: { diff --git a/packages/frontend/src/components/MkUserSetupDialog.Privacy.stories.impl.ts b/packages/frontend/src/components/MkUserSetupDialog.Privacy.stories.impl.ts new file mode 100644 index 0000000000..70817d83c3 --- /dev/null +++ b/packages/frontend/src/components/MkUserSetupDialog.Privacy.stories.impl.ts @@ -0,0 +1,31 @@ +/* eslint-disable @typescript-eslint/explicit-function-return-type */ +import { StoryObj } from '@storybook/vue3'; +import MkUserSetupDialog_Privacy from './MkUserSetupDialog.Privacy.vue'; +export const Default = { + render(args) { + return { + components: { + MkUserSetupDialog_Privacy, + }, + setup() { + return { + args, + }; + }, + computed: { + props() { + return { + ...this.args, + }; + }, + }, + template: '<MkUserSetupDialog_Privacy v-bind="props" />', + }; + }, + args: { + + }, + parameters: { + layout: 'centered', + }, +} satisfies StoryObj<typeof MkUserSetupDialog_Privacy>; diff --git a/packages/frontend/src/components/MkUserSetupDialog.Privacy.vue b/packages/frontend/src/components/MkUserSetupDialog.Privacy.vue new file mode 100644 index 0000000000..4ed5c3ab00 --- /dev/null +++ b/packages/frontend/src/components/MkUserSetupDialog.Privacy.vue @@ -0,0 +1,52 @@ +<template> +<div class="_gaps"> + <MkInfo>{{ i18n.ts._initialAccountSetting.theseSettingsCanEditLater }}</MkInfo> + + <MkSwitch v-model="isLocked">{{ i18n.ts.makeFollowManuallyApprove }}<template #caption>{{ i18n.ts.lockedAccountInfo }}</template></MkSwitch> + + <MkSwitch v-model="hideOnlineStatus" @update:model-value="save()"> + {{ i18n.ts.hideOnlineStatus }} + <template #caption>{{ i18n.ts.hideOnlineStatusDescription }}</template> + </MkSwitch> + + <MkSwitch v-model="noCrawle" @update:model-value="save()"> + {{ i18n.ts.noCrawle }} + <template #caption>{{ i18n.ts.noCrawleDescription }}</template> + </MkSwitch> + + <MkSwitch v-model="preventAiLearning" @update:model-value="save()"> + {{ i18n.ts.preventAiLearning }}<span class="_beta">{{ i18n.ts.beta }}</span> + <template #caption>{{ i18n.ts.preventAiLearningDescription }}</template> + </MkSwitch> + + <MkInfo>{{ i18n.ts._initialAccountSetting.youCanEditMoreSettingsInSettingsPageLater }}</MkInfo> +</div> +</template> + +<script lang="ts" setup> +import { computed, ref, watch } from 'vue'; +import { instance } from '@/instance'; +import { i18n } from '@/i18n'; +import MkSwitch from '@/components/MkSwitch.vue'; +import MkInfo from '@/components/MkInfo.vue'; +import * as os from '@/os'; +import { $i } from '@/account'; + +let isLocked = ref(false); +let hideOnlineStatus = ref(false); +let noCrawle = ref(false); +let preventAiLearning = ref(true); + +watch(isLocked, () => { + os.apiWithDialog('i/update', { + isLocked: !!isLocked.value, + hideOnlineStatus: !!hideOnlineStatus.value, + noCrawle: !!noCrawle.value, + preventAiLearning: !!preventAiLearning.value, + }); +}); +</script> + +<style lang="scss" module> + +</style> diff --git a/packages/frontend/src/components/MkUserSetupDialog.Profile.vue b/packages/frontend/src/components/MkUserSetupDialog.Profile.vue index adb8d43349..f26ea11214 100644 --- a/packages/frontend/src/components/MkUserSetupDialog.Profile.vue +++ b/packages/frontend/src/components/MkUserSetupDialog.Profile.vue @@ -37,10 +37,6 @@ import { chooseFileFromPc } from '@/scripts/select-file'; import * as os from '@/os'; import { $i } from '@/account'; -const emit = defineEmits<{ - (ev: 'done'): void; -}>(); - const name = ref(''); const description = ref(''); diff --git a/packages/frontend/src/components/MkUserSetupDialog.vue b/packages/frontend/src/components/MkUserSetupDialog.vue index 096b88c309..e210b33168 100644 --- a/packages/frontend/src/components/MkUserSetupDialog.vue +++ b/packages/frontend/src/components/MkUserSetupDialog.vue @@ -7,9 +7,17 @@ @close="close(true)" @closed="emit('closed')" > - <template #header>{{ i18n.ts.initialAccountSetting }}</template> + <template v-if="page === 1" #header>{{ i18n.ts._initialAccountSetting.profileSetting }}</template> + <template v-else-if="page === 2" #header>{{ i18n.ts._initialAccountSetting.privacySetting }}</template> + <template v-else-if="page === 3" #header>{{ i18n.ts.follow }}</template> + <template v-else-if="page === 4" #header>{{ i18n.ts.pushNotification }}</template> + <template v-else-if="page === 5" #header>{{ i18n.ts.done }}</template> + <template v-else #header>{{ i18n.ts.initialAccountSetting }}</template> <div style="overflow-x: clip;"> + <div :class="$style.progressBar"> + <div :class="$style.progressBarValue" :style="{ width: `${(page / 5) * 100}%` }"></div> + </div> <Transition mode="out-in" :enter-active-class="$style.transition_x_enterActive" @@ -40,12 +48,20 @@ <template v-else-if="page === 2"> <div style="height: 100cqh; overflow: auto;"> <MkSpacer :margin-min="20" :margin-max="28"> - <XFollow/> + <XPrivacy/> <MkButton primary rounded gradate style="margin: 16px auto 0 auto;" data-cy-user-setup-continue @click="page++">{{ i18n.ts.continue }} <i class="ti ti-arrow-right"></i></MkButton> </MkSpacer> </div> </template> <template v-else-if="page === 3"> + <div style="height: 100cqh; overflow: auto;"> + <MkSpacer :margin-min="20" :margin-max="28"> + <XFollow/> + <MkButton primary rounded gradate style="margin: 16px auto 0 auto;" data-cy-user-setup-continue @click="page++">{{ i18n.ts.continue }} <i class="ti ti-arrow-right"></i></MkButton> + </MkSpacer> + </div> + </template> + <template v-else-if="page === 4"> <div :class="$style.centerPage"> <MkSpacer :margin-min="20" :margin-max="28"> <div class="_gaps" style="text-align: center;"> @@ -58,7 +74,7 @@ </MkSpacer> </div> </template> - <template v-else-if="page === 4"> + <template v-else-if="page === 5"> <div :class="$style.centerPage"> <MkSpacer :margin-min="20" :margin-max="28"> <div class="_gaps" style="text-align: center;"> @@ -87,6 +103,7 @@ import MkModalWindow from '@/components/MkModalWindow.vue'; import MkButton from '@/components/MkButton.vue'; import XProfile from '@/components/MkUserSetupDialog.Profile.vue'; import XFollow from '@/components/MkUserSetupDialog.Follow.vue'; +import XPrivacy from '@/components/MkUserSetupDialog.Privacy.vue'; import { i18n } from '@/i18n'; import { instance } from '@/instance'; import { host } from '@/config'; @@ -134,6 +151,21 @@ async function close(skip: boolean) { transform: translateX(-50px); } +.progressBar { + position: absolute; + top: 0; + left: 0; + z-index: 10; + width: 100%; + height: 4px; +} + +.progressBarValue { + height: 100%; + background: linear-gradient(90deg, var(--buttonGradateA), var(--buttonGradateB)); + transition: all 0.5s cubic-bezier(0,.5,.5,1); +} + .centerPage { display: flex; justify-content: center;