summaryrefslogtreecommitdiff
path: root/packages/frontend/src/pages/admin/server-rules.vue
diff options
context:
space:
mode:
authorsyuilo <4439005+syuilo@users.noreply.github.com>2026-01-07 21:46:03 +0900
committerGitHub <noreply@github.com>2026-01-07 21:46:03 +0900
commit8c5572dd3ba11104493d8386fe56cb6ff96cfc56 (patch)
tree440ca5048723e10258ad84729f095b60b2d4fe70 /packages/frontend/src/pages/admin/server-rules.vue
parentUpdate README.md (diff)
downloadmisskey-8c5572dd3ba11104493d8386fe56cb6ff96cfc56.tar.gz
misskey-8c5572dd3ba11104493d8386fe56cb6ff96cfc56.tar.bz2
misskey-8c5572dd3ba11104493d8386fe56cb6ff96cfc56.zip
enhance(frontend): remove vuedraggable (#17073)
* wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * Update page-editor.blocks.vue * Update MkDraggable.vue * refactor * refactor * ✌️ * refactor * Update MkDraggable.vue * ios * 🎨 * 🎨
Diffstat (limited to 'packages/frontend/src/pages/admin/server-rules.vue')
-rw-r--r--packages/frontend/src/pages/admin/server-rules.vue46
1 files changed, 23 insertions, 23 deletions
diff --git a/packages/frontend/src/pages/admin/server-rules.vue b/packages/frontend/src/pages/admin/server-rules.vue
index d26f02b41c..b192129548 100644
--- a/packages/frontend/src/pages/admin/server-rules.vue
+++ b/packages/frontend/src/pages/admin/server-rules.vue
@@ -12,28 +12,25 @@ SPDX-License-Identifier: AGPL-3.0-only
<div class="_gaps_m">
<div><SearchText>{{ i18n.ts._serverRules.description }}</SearchText></div>
- <Sortable
+ <MkDraggable
v-model="serverRules"
- class="_gaps_m"
- :itemKey="(_, i) => i"
- :animation="150"
- :handle="'.' + $style.itemHandle"
- @start="e => e.item.classList.add('active')"
- @end="e => e.item.classList.remove('active')"
+ direction="vertical"
+ withGaps
+ manualDragStart
>
- <template #item="{element,index}">
+ <template #default="{ item, index, dragStart }">
<div :class="$style.item">
<div :class="$style.itemHeader">
<div :class="$style.itemNumber" v-text="String(index + 1)"/>
- <span :class="$style.itemHandle"><i class="ti ti-menu"/></span>
- <button class="_button" :class="$style.itemRemove" @click="remove(index)"><i class="ti ti-x"></i></button>
+ <span :class="$style.itemHandle" :draggable="true" @dragstart.stop="dragStart"><i class="ti ti-menu"/></span>
+ <button class="_button" :class="$style.itemRemove" @click="remove(item.id)"><i class="ti ti-x"></i></button>
</div>
- <MkInput v-model="serverRules[index]"/>
+ <MkInput :modelValue="item.text" @update:modelValue="serverRules[index].text = $event"/>
</div>
</template>
- </Sortable>
+ </MkDraggable>
<div :class="$style.commands">
- <MkButton rounded @click="serverRules.push('')"><i class="ti ti-plus"></i> {{ i18n.ts.add }}</MkButton>
+ <MkButton rounded @click="add"><i class="ti ti-plus"></i> {{ i18n.ts.add }}</MkButton>
<MkButton primary rounded @click="save"><i class="ti ti-check"></i> {{ i18n.ts.save }}</MkButton>
</div>
</div>
@@ -42,28 +39,31 @@ SPDX-License-Identifier: AGPL-3.0-only
</template>
<script lang="ts" setup>
-import { defineAsyncComponent, ref, computed } from 'vue';
+import { ref } from 'vue';
import * as os from '@/os.js';
import { fetchInstance, instance } from '@/instance.js';
import { i18n } from '@/i18n.js';
import MkButton from '@/components/MkButton.vue';
import MkInput from '@/components/MkInput.vue';
import MkFolder from '@/components/MkFolder.vue';
+import MkDraggable from '@/components/MkDraggable.vue';
-const Sortable = defineAsyncComponent(() => import('vuedraggable').then(x => x.default));
+const serverRules = ref<{ text: string; id: string; }[]>(instance.serverRules.map(text => ({ text, id: Math.random().toString() })));
-const serverRules = ref<string[]>(instance.serverRules);
-
-const save = async () => {
+async function save() {
await os.apiWithDialog('admin/update-meta', {
- serverRules: serverRules.value,
+ serverRules: serverRules.value.map(r => r.text),
});
fetchInstance(true);
-};
+}
-const remove = (index: number): void => {
- serverRules.value.splice(index, 1);
-};
+function add(): void {
+ serverRules.value.push({ text: '', id: Math.random().toString() });
+}
+
+function remove(id: string): void {
+ serverRules.value = serverRules.value.filter(r => r.id !== id);
+}
</script>
<style lang="scss" module>