Added date precision to release date edit.
This commit is contained in:
parent
65edafad54
commit
8ada96c8bc
|
@ -111,30 +111,44 @@
|
||||||
|
|
||||||
<input
|
<input
|
||||||
v-if="item.type === 'string'"
|
v-if="item.type === 'string'"
|
||||||
:value="edits[item.key] || item.value"
|
v-model="edits[item.key]"
|
||||||
class="string input"
|
class="string input"
|
||||||
:disabled="!editing.has(item.key)"
|
:disabled="!editing.has(item.key)"
|
||||||
@input="setValue(item, $event)"
|
|
||||||
>
|
>
|
||||||
|
|
||||||
<textarea
|
<textarea
|
||||||
v-if="item.type === 'text'"
|
v-if="item.type === 'text'"
|
||||||
:value="edits[item.key] || item.value"
|
v-model="edits[item.key]"
|
||||||
:placeholder="item.placeholder"
|
:placeholder="item.placeholder"
|
||||||
rows="3"
|
rows="3"
|
||||||
class="text input"
|
class="text input"
|
||||||
:disabled="!editing.has(item.key)"
|
:disabled="!editing.has(item.key)"
|
||||||
@input="setValue(item, $event)"
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<input
|
<div
|
||||||
v-if="item.type === 'date'"
|
v-if="item.type === 'date'"
|
||||||
type="datetime-local"
|
class="date"
|
||||||
:value="edits[item.key] || item.value"
|
|
||||||
class="date input"
|
|
||||||
:disabled="!editing.has(item.key)"
|
|
||||||
@input="setValue(item, $event)"
|
|
||||||
>
|
>
|
||||||
|
<input
|
||||||
|
v-model="edits[item.key].date"
|
||||||
|
type="datetime-local"
|
||||||
|
class="date input"
|
||||||
|
:disabled="!editing.has(item.key)"
|
||||||
|
>
|
||||||
|
|
||||||
|
<select
|
||||||
|
v-if="item.value.precision"
|
||||||
|
v-model="edits[item.key].precision"
|
||||||
|
class="input"
|
||||||
|
:disabled="!editing.has(item.key)"
|
||||||
|
>
|
||||||
|
<option value="minute">Minute</option>
|
||||||
|
<option value="hour">Hour</option>
|
||||||
|
<option value="day">Day</option>
|
||||||
|
<option value="month">Month</option>
|
||||||
|
<option value="year">Year</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-if="item.type === 'duration'"
|
v-if="item.type === 'duration'"
|
||||||
|
@ -257,9 +271,12 @@ const fields = computed(() => [
|
||||||
{
|
{
|
||||||
key: 'date',
|
key: 'date',
|
||||||
type: 'date',
|
type: 'date',
|
||||||
value: scene.value.date
|
value: {
|
||||||
? format(scene.value.date, 'yyyy-MM-dd hh:mm')
|
date: scene.value.date
|
||||||
: null,
|
? format(scene.value.date, 'yyyy-MM-dd hh:mm')
|
||||||
|
: null,
|
||||||
|
precision: scene.value.datePrecision,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'duration',
|
key: 'duration',
|
||||||
|
@ -270,9 +287,12 @@ const fields = computed(() => [
|
||||||
key: 'productionDate',
|
key: 'productionDate',
|
||||||
label: 'production date',
|
label: 'production date',
|
||||||
type: 'date',
|
type: 'date',
|
||||||
value: scene.value.productionDate
|
value: {
|
||||||
? format(scene.value.productionDate, 'yyyy-MM-dd hh:mm')
|
date: scene.value.productionDate
|
||||||
: null,
|
? format(scene.value.productionDate, 'yyyy-MM-dd hh:mm')
|
||||||
|
: null,
|
||||||
|
precision: scene.value.productionDatePrecision, // not currently implemented
|
||||||
|
},
|
||||||
},
|
},
|
||||||
...(user.role === 'user'
|
...(user.role === 'user'
|
||||||
? []
|
? []
|
||||||
|
@ -284,32 +304,40 @@ const fields = computed(() => [
|
||||||
}]),
|
}]),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
function simplifyArray(value) {
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
return value.map((item) => item.hash || item.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
const editing = ref(new Set());
|
const editing = ref(new Set());
|
||||||
const edits = ref({});
|
const edits = ref(Object.fromEntries(fields.value.map((field) => [field.key, simplifyArray(field.value)])));
|
||||||
const comment = ref(null);
|
const comment = ref(null);
|
||||||
const apply = ref(user.role !== 'user');
|
const apply = ref(user.role !== 'user');
|
||||||
const submitted = ref(false);
|
const submitted = ref(false);
|
||||||
|
|
||||||
|
const keyMap = {
|
||||||
|
date: {
|
||||||
|
date: 'date',
|
||||||
|
precision: 'datePrecision',
|
||||||
|
},
|
||||||
|
productionDate: {
|
||||||
|
date: 'productionDate',
|
||||||
|
precision: 'productionDatePrecision',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
function toggleField(item) {
|
function toggleField(item) {
|
||||||
if (editing.value.has(item.key)) {
|
if (editing.value.has(item.key)) {
|
||||||
editing.value.delete(item.key);
|
editing.value.delete(item.key);
|
||||||
delete edits.value[item.key];
|
// delete edits.value[item.key];
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
editing.value.add(item.key);
|
editing.value.add(item.key);
|
||||||
|
|
||||||
if (Array.isArray(item.value)) {
|
|
||||||
edits.value[item.key] = item.value.map((value) => value.hash || value.id);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
edits.value[item.key] = item.value;
|
|
||||||
}
|
|
||||||
|
|
||||||
function setValue(item, event) {
|
|
||||||
edits.value[item.key] = event.target.value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const timeUnits = ['h', 'm', 's'];
|
const timeUnits = ['h', 'm', 's'];
|
||||||
|
@ -323,7 +351,13 @@ async function submit() {
|
||||||
await post('/revisions/scenes', {
|
await post('/revisions/scenes', {
|
||||||
sceneId: scene.value.id,
|
sceneId: scene.value.id,
|
||||||
edits: {
|
edits: {
|
||||||
...edits.value,
|
...Object.fromEntries(Array.from(editing.value).flatMap((key) => {
|
||||||
|
if (edits.value[key] && typeof edits.value[key] === 'object' && !Array.isArray(edits.value[key])) {
|
||||||
|
return Object.entries(edits.value[key]).map(([valueKey, value]) => [keyMap[key]?.[valueKey] || valueKey, value]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [[key, edits.value[key]]];
|
||||||
|
})),
|
||||||
duration: edits.value.duration
|
duration: edits.value.duration
|
||||||
? (((edits.value.duration[0] || 0) * 3600) + ((edits.value.duration[1] || 0) * 60) + (edits.value.duration[2] || 0)) || null
|
? (((edits.value.duration[0] || 0) * 3600) + ((edits.value.duration[1] || 0) * 60) + (edits.value.duration[2] || 0)) || null
|
||||||
: undefined,
|
: undefined,
|
||||||
|
@ -415,6 +449,12 @@ async function submit() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.date {
|
||||||
|
.input {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.item-actions {
|
.item-actions {
|
||||||
.icon {
|
.icon {
|
||||||
padding: .25rem 1rem;
|
padding: .25rem 1rem;
|
||||||
|
|
|
@ -706,6 +706,7 @@ export async function fetchSceneRevisions(revisionId, filters = {}, reqUser) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const keyMap = {
|
const keyMap = {
|
||||||
|
datePrecision: 'date_precision',
|
||||||
productionDate: 'production_date',
|
productionDate: 'production_date',
|
||||||
productionLocation: 'production_location',
|
productionLocation: 'production_location',
|
||||||
productionCity: 'production_city',
|
productionCity: 'production_city',
|
||||||
|
@ -784,6 +785,7 @@ async function applySceneRevision(revisionIds) {
|
||||||
'title',
|
'title',
|
||||||
'description',
|
'description',
|
||||||
'date',
|
'date',
|
||||||
|
'datePrecision',
|
||||||
'duration',
|
'duration',
|
||||||
'productionDate',
|
'productionDate',
|
||||||
'productionLocation',
|
'productionLocation',
|
||||||
|
|
Loading…
Reference in New Issue