Skip to content

Commit 50b3a1e

Browse files
committed
fix #302
1 parent 23dd378 commit 50b3a1e

File tree

13 files changed

+406
-118
lines changed

13 files changed

+406
-118
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<template>
2+
<q-dialog v-model="dialog" transition-duration="100" @hide="closeDialog">
3+
<q-card style="min-width: 600px">
4+
<q-card-section class="flex justify-between">
5+
<h2 class="text-h6 q-my-none">
6+
{{ t('repositories.repository_policies.edit_policy') }}
7+
</h2>
8+
<q-btn v-close-popup icon="close" flat round dense />
9+
</q-card-section>
10+
11+
<q-separator />
12+
13+
<repository-snapshot-policy-form
14+
v-model="policy"
15+
:form-valid="formValid"
16+
:loading="loading"
17+
:is-edit="true"
18+
:submit-label="t('defaults.update')"
19+
@submit="updatePolicy"
20+
/>
21+
</q-card>
22+
</q-dialog>
23+
</template>
24+
25+
<script setup lang="ts">
26+
import { ref, watch } from 'vue'
27+
import { useTranslation } from '../../composables/i18n'
28+
import { useEditRepositorySnapshotPolicy } from '../../composables/components/repositories/EditRepositorySnapshotPolicy'
29+
import RepositorySnapshotPolicyForm from './RepositorySnapshotPolicyForm.vue'
30+
31+
const t = useTranslation()
32+
33+
const emit = defineEmits(['reload'])
34+
35+
const props = defineProps<{ repository: string; policyId: string }>()
36+
37+
const policyIdRef = ref(props.policyId)
38+
39+
watch(
40+
() => props.policyId,
41+
(newPolicyId) => {
42+
policyIdRef.value = newPolicyId
43+
}
44+
)
45+
46+
const { dialog, policy, formValid, loading, updatePolicy, closeDialog, openDialog } = useEditRepositorySnapshotPolicy(
47+
emit,
48+
props.repository,
49+
policyIdRef
50+
)
51+
52+
defineExpose({ openDialog })
53+
</script>

src/components/repositories/NewRepositorySnapshotPolicy.vue

Lines changed: 8 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -12,115 +12,23 @@
1212

1313
<q-separator />
1414

15-
<q-form @submit="createPolicy">
16-
<q-card-section>
17-
<custom-input
18-
v-model="policy.id"
19-
:label="t('snapshot_policies.new_policy.form.id.label')"
20-
class="q-mb-md"
21-
autocomplete="off"
22-
autofocus
23-
outlined
24-
required
25-
:rules="[required]"
26-
/>
27-
28-
<custom-input
29-
v-model="policy.name"
30-
:label="t('snapshot_policies.new_policy.form.name.label')"
31-
class="q-mb-md"
32-
autocomplete="off"
33-
autofocus
34-
outlined
35-
required
36-
:rules="[required]"
37-
/>
38-
39-
<custom-input
40-
v-model="policy.schedule"
41-
:label="t('snapshot_policies.new_policy.form.schedule.label')"
42-
:hint="t('snapshot_policies.new_policy.form.schedule.hint')"
43-
class="q-mb-md"
44-
outlined
45-
autocomplete="off"
46-
required
47-
:rules="[required]"
48-
/>
49-
50-
<custom-input
51-
v-model="policy.indices"
52-
:label="t('snapshot_policies.new_policy.form.indices.label')"
53-
:hint="t('snapshot_policies.new_policy.form.indices.hint')"
54-
class="q-mb-md"
55-
outlined
56-
placeholder="*"
57-
/>
58-
59-
<q-checkbox
60-
v-model="policy.ignoreUnavailable"
61-
:label="t('snapshot_policies.new_policy.form.ignore_unavailable.label')"
62-
class="q-mb-md"
63-
/>
64-
65-
<q-checkbox
66-
v-model="policy.includeGlobalState"
67-
:label="t('snapshot_policies.new_policy.form.include_global_state.label')"
68-
class="q-mb-md"
69-
/>
70-
71-
<q-separator class="q-my-lg" />
72-
73-
<div class="text-subtitle2 q-mb-md">{{ t('snapshot_policies.new_policy.form.retention.heading') }}</div>
74-
75-
<custom-input
76-
v-model="policy.retentionExpireAfter"
77-
:label="t('snapshot_policies.new_policy.form.retention.expire_after.label')"
78-
:hint="t('snapshot_policies.new_policy.form.retention.expire_after.hint')"
79-
class="q-mb-md"
80-
outlined
81-
/>
82-
83-
<custom-input
84-
v-model.number="policy.retentionMaxCount"
85-
:label="t('snapshot_policies.new_policy.form.retention.max_count.label')"
86-
:hint="t('snapshot_policies.new_policy.form.retention.max_count.hint')"
87-
class="q-mb-md"
88-
outlined
89-
type="number"
90-
/>
91-
92-
<custom-input
93-
v-model.number="policy.retentionMinCount"
94-
:label="t('snapshot_policies.new_policy.form.retention.min_count.label')"
95-
:hint="t('snapshot_policies.new_policy.form.retention.min_count.hint')"
96-
outlined
97-
type="number"
98-
/>
99-
</q-card-section>
100-
101-
<q-card-section>
102-
<q-btn
103-
:disable="loading || !formValid"
104-
:loading="loading"
105-
:label="t('defaults.create')"
106-
color="positive"
107-
type="submit"
108-
class="q-mr-md"
109-
/>
110-
<q-btn v-close-popup flat :label="t('defaults.close')" />
111-
</q-card-section>
112-
</q-form>
15+
<repository-snapshot-policy-form
16+
v-model="policy"
17+
:form-valid="formValid"
18+
:loading="loading"
19+
:submit-label="t('defaults.create')"
20+
@submit="createPolicy"
21+
/>
11322
</q-card>
11423
</q-dialog>
11524
</template>
11625

11726
<script setup lang="ts">
11827
import { useTranslation } from '../../composables/i18n'
11928
import { useNewRepositorySnapshotPolicy } from '../../composables/components/repositories/NewRepositorySnapshotPolicy'
120-
import CustomInput from '../shared/CustomInput.vue'
29+
import RepositorySnapshotPolicyForm from './RepositorySnapshotPolicyForm.vue'
12130
12231
const t = useTranslation()
123-
const required = (val: string) => !!val || 'required'
12432
12533
const emit = defineEmits(['reload'])
12634

src/components/repositories/RepositoryPolicies.vue

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@
1919
<new-repository-snapshot-policy :repository="repository" @reload="loadPolicies" />
2020
<span class="q-ml-md">{{ t('repositories.repository_policies.repository', { repository }) }}</span>
2121
</div>
22+
23+
<edit-repository-snapshot-policy
24+
ref="editDialog"
25+
:repository="repository"
26+
:policy-id="selectedPolicyId"
27+
@reload="loadPolicies"
28+
/>
2229
</q-card-section>
2330

2431
<q-separator />
@@ -64,6 +71,7 @@ import { DEFAULT_ROWS_PER_PAGE } from '../../consts'
6471
import { RepositoryPoliciesProps, useRepositoryPolicies } from '../../composables/components/repositories/RepositoryPolicies'
6572
import { useTranslation } from '../../composables/i18n'
6673
import NewRepositorySnapshotPolicy from './NewRepositorySnapshotPolicy.vue'
74+
import EditRepositorySnapshotPolicy from './EditRepositorySnapshotPolicy.vue'
6775
import { type SnapshotPolicyRetention } from '../../types/snapshotPolicies'
6876
6977
const t = useTranslation()
@@ -80,5 +88,6 @@ const retentionFormat = (retention: SnapshotPolicyRetention | undefined) => {
8088
.join(', ')
8189
}
8290
83-
const { dialog, policies, loadPolicies, executePolicy, editPolicy, deletePolicy, columns } = useRepositoryPolicies(props, emit)
91+
const { dialog, policies, loadPolicies, executePolicy, editPolicy, deletePolicy, columns, selectedPolicyId, editDialog } =
92+
useRepositoryPolicies(props, emit)
8493
</script>
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
<template>
2+
<q-form @submit="submit">
3+
<q-card-section>
4+
<custom-input
5+
v-model="localPolicy.id"
6+
:label="t('snapshot_policies.new_policy.form.id.label')"
7+
class="q-mb-md"
8+
autocomplete="off"
9+
:autofocus="!isEdit"
10+
outlined
11+
required
12+
:rules="[required]"
13+
:readonly="isEdit"
14+
/>
15+
16+
<custom-input
17+
v-model="localPolicy.name"
18+
:label="t('snapshot_policies.new_policy.form.name.label')"
19+
class="q-mb-md"
20+
autocomplete="off"
21+
:autofocus="isEdit"
22+
outlined
23+
required
24+
:rules="[required]"
25+
/>
26+
27+
<custom-input
28+
v-model="localPolicy.schedule"
29+
:label="t('snapshot_policies.new_policy.form.schedule.label')"
30+
:hint="t('snapshot_policies.new_policy.form.schedule.hint')"
31+
class="q-mb-md"
32+
outlined
33+
autocomplete="off"
34+
required
35+
:rules="[required]"
36+
/>
37+
38+
<custom-input
39+
v-model="localPolicy.indices"
40+
:label="t('snapshot_policies.new_policy.form.indices.label')"
41+
:hint="t('snapshot_policies.new_policy.form.indices.hint')"
42+
class="q-mb-md"
43+
outlined
44+
placeholder="*"
45+
/>
46+
47+
<q-checkbox
48+
v-model="localPolicy.ignoreUnavailable"
49+
:label="t('snapshot_policies.new_policy.form.ignore_unavailable.label')"
50+
class="q-mb-md"
51+
/>
52+
53+
<q-checkbox
54+
v-model="localPolicy.includeGlobalState"
55+
:label="t('snapshot_policies.new_policy.form.include_global_state.label')"
56+
class="q-mb-md"
57+
/>
58+
59+
<q-separator class="q-my-lg" />
60+
61+
<div class="text-subtitle2 q-mb-md">{{ t('snapshot_policies.new_policy.form.retention.heading') }}</div>
62+
63+
<custom-input
64+
v-model="localPolicy.retentionExpireAfter"
65+
:label="t('snapshot_policies.new_policy.form.retention.expire_after.label')"
66+
:hint="t('snapshot_policies.new_policy.form.retention.expire_after.hint')"
67+
class="q-mb-md"
68+
outlined
69+
/>
70+
71+
<custom-input
72+
v-model.number="localPolicy.retentionMaxCount"
73+
:label="t('snapshot_policies.new_policy.form.retention.max_count.label')"
74+
:hint="t('snapshot_policies.new_policy.form.retention.max_count.hint')"
75+
class="q-mb-md"
76+
outlined
77+
type="number"
78+
/>
79+
80+
<custom-input
81+
v-model.number="localPolicy.retentionMinCount"
82+
:label="t('snapshot_policies.new_policy.form.retention.min_count.label')"
83+
:hint="t('snapshot_policies.new_policy.form.retention.min_count.hint')"
84+
outlined
85+
type="number"
86+
/>
87+
</q-card-section>
88+
89+
<q-card-section>
90+
<q-btn
91+
:disable="loading || !formValid"
92+
:loading="loading"
93+
:label="submitLabel"
94+
color="positive"
95+
type="submit"
96+
class="q-mr-md"
97+
/>
98+
<q-btn v-close-popup flat :label="t('defaults.close')" />
99+
</q-card-section>
100+
</q-form>
101+
</template>
102+
103+
<script setup lang="ts">
104+
import { computed } from 'vue'
105+
import { useTranslation } from '../../composables/i18n'
106+
import CustomInput from '../shared/CustomInput.vue'
107+
import type { SnapshotPolicyForm } from '../../types/snapshotPolicies'
108+
109+
const t = useTranslation()
110+
const required = (val: string) => !!val || 'required'
111+
112+
interface Props {
113+
modelValue: SnapshotPolicyForm
114+
formValid: boolean
115+
loading: boolean
116+
isEdit?: boolean
117+
submitLabel?: string
118+
}
119+
120+
const props = withDefaults(defineProps<Props>(), {
121+
isEdit: false,
122+
submitLabel: undefined
123+
})
124+
125+
const emit = defineEmits<{
126+
'update:modelValue': [value: SnapshotPolicyForm]
127+
submit: []
128+
}>()
129+
130+
const localPolicy = computed({
131+
get: () => props.modelValue,
132+
set: (value: SnapshotPolicyForm) => emit('update:modelValue', value)
133+
})
134+
135+
const submit = () => {
136+
emit('submit')
137+
}
138+
</script>

0 commit comments

Comments
 (0)