2023-07-27 14:31:52 +09:00
<!--
SPDX - FileCopyrightText : syuilo and other misskey contributors
SPDX - License - Identifier : AGPL - 3.0 - only
-- >
2022-07-16 23:11:05 +09:00
< template >
< MkStickyContainer >
< template # header > < MkPageHeader :actions ="headerActions" :tabs ="headerTabs" / > < / template >
2023-05-19 16:20:53 +09:00
< MkSpacer :contentMax ="600" :marginMin ="16" >
2023-01-06 13:40:17 +09:00
< div class = "_gaps_m" >
2023-01-05 21:04:56 +09:00
< FormSplit >
< MkKeyValue >
< template # key > { { i18n . ts . _registry . domain } } < / template >
2023-11-03 13:23:03 +09:00
< template # value > { { props . domain === '@' ? i18n . ts . system : props . domain . toUpperCase ( ) } } < / template >
2023-01-05 21:04:56 +09:00
< / MkKeyValue >
< MkKeyValue >
< template # key > { { i18n . ts . _registry . scope } } < / template >
< template # value > { { scope . join ( '/' ) } } < / template >
< / MkKeyValue >
< / FormSplit >
2023-07-08 07:08:16 +09:00
2023-01-05 21:04:56 +09:00
< MkButton primary @click ="createKey" > {{ i18n.ts._registry.createKey }} < / MkButton >
2022-07-16 23:11:05 +09:00
2023-01-05 21:04:56 +09:00
< FormSection v-if ="keys" >
< template # label > { { i18n . ts . keys } } < / template >
2023-11-03 13:23:03 +09:00
< div class = "_gaps_s" >
< FormLink v-for ="key in keys" :to="`/registry/value/${props.domain}/${scope.join('/')}/${key[0]}`" class="_monospace" > {{ key [ 0 ] }} < template # suffix > { { key [ 1 ] . toUpperCase ( ) } } < / template > < / FormLink >
2023-01-05 21:04:56 +09:00
< / div >
< / FormSection >
< / div >
2022-07-16 23:11:05 +09:00
< / MkSpacer >
< / MkStickyContainer >
< / template >
< script lang = "ts" setup >
2023-02-16 23:09:41 +09:00
import { watch } from 'vue' ;
2022-07-16 23:11:05 +09:00
import JSON5 from 'json5' ;
2023-09-19 16:37:43 +09:00
import * as os from '@/os.js' ;
import { i18n } from '@/i18n.js' ;
import { definePageMetadata } from '@/scripts/page-metadata.js' ;
2022-07-16 23:11:05 +09:00
import FormLink from '@/components/form/link.vue' ;
import FormSection from '@/components/form/section.vue' ;
2022-09-06 18:21:49 +09:00
import MkButton from '@/components/MkButton.vue' ;
2022-08-31 00:24:33 +09:00
import MkKeyValue from '@/components/MkKeyValue.vue' ;
2022-07-16 23:11:05 +09:00
import FormSplit from '@/components/form/split.vue' ;
const props = defineProps < {
path : string ;
2023-11-03 13:23:03 +09:00
domain : string ;
2022-07-16 23:11:05 +09:00
} > ( ) ;
2023-11-03 13:23:03 +09:00
const scope = $computed ( ( ) => props . path ? props . path . split ( '/' ) : [ ] ) ;
2022-07-16 23:11:05 +09:00
let keys = $ref ( null ) ;
function fetchKeys ( ) {
os . api ( 'i/registry/keys-with-type' , {
scope : scope ,
2023-11-03 13:23:03 +09:00
domain : props . domain === '@' ? null : props . domain ,
2022-07-16 23:11:05 +09:00
} ) . then ( res => {
keys = Object . entries ( res ) . sort ( ( a , b ) => a [ 0 ] . localeCompare ( b [ 0 ] ) ) ;
} ) ;
}
async function createKey ( ) {
const { canceled , result } = await os . form ( i18n . ts . _registry . createKey , {
key : {
type : 'string' ,
label : i18n . ts . _registry . key ,
} ,
value : {
type : 'string' ,
multiline : true ,
label : i18n . ts . value ,
} ,
scope : {
type : 'string' ,
label : i18n . ts . _registry . scope ,
default : scope . join ( '/' ) ,
} ,
} ) ;
if ( canceled ) return ;
os . apiWithDialog ( 'i/registry/set' , {
scope : result . scope . split ( '/' ) ,
key : result . key ,
value : JSON5 . parse ( result . value ) ,
} ) . then ( ( ) => {
fetchKeys ( ) ;
} ) ;
}
watch ( ( ) => props . path , fetchKeys , { immediate : true } ) ;
const headerActions = $computed ( ( ) => [ ] ) ;
const headerTabs = $computed ( ( ) => [ ] ) ;
definePageMetadata ( {
title : i18n . ts . registry ,
2022-12-19 19:01:30 +09:00
icon : 'ti ti-adjustments' ,
2022-07-16 23:11:05 +09:00
} ) ;
< / script >