diff --git a/pages/scene/edit/+Page.vue b/pages/scene/edit/+Page.vue
index 8347e0f..50e7f40 100644
--- a/pages/scene/edit/+Page.vue
+++ b/pages/scene/edit/+Page.vue
@@ -111,30 +111,44 @@
-
+
+
+
+
[
{
key: 'date',
type: 'date',
- value: scene.value.date
- ? format(scene.value.date, 'yyyy-MM-dd hh:mm')
- : null,
+ value: {
+ date: scene.value.date
+ ? format(scene.value.date, 'yyyy-MM-dd hh:mm')
+ : null,
+ precision: scene.value.datePrecision,
+ },
},
{
key: 'duration',
@@ -270,9 +287,12 @@ const fields = computed(() => [
key: 'productionDate',
label: 'production date',
type: 'date',
- value: scene.value.productionDate
- ? format(scene.value.productionDate, 'yyyy-MM-dd hh:mm')
- : null,
+ value: {
+ date: scene.value.productionDate
+ ? format(scene.value.productionDate, 'yyyy-MM-dd hh:mm')
+ : null,
+ precision: scene.value.productionDatePrecision, // not currently implemented
+ },
},
...(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 edits = ref({});
+const edits = ref(Object.fromEntries(fields.value.map((field) => [field.key, simplifyArray(field.value)])));
const comment = ref(null);
const apply = ref(user.role !== 'user');
const submitted = ref(false);
+const keyMap = {
+ date: {
+ date: 'date',
+ precision: 'datePrecision',
+ },
+ productionDate: {
+ date: 'productionDate',
+ precision: 'productionDatePrecision',
+ },
+};
+
function toggleField(item) {
if (editing.value.has(item.key)) {
editing.value.delete(item.key);
- delete edits.value[item.key];
+ // delete edits.value[item.key];
return;
}
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'];
@@ -323,7 +351,13 @@ async function submit() {
await post('/revisions/scenes', {
sceneId: scene.value.id,
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
? (((edits.value.duration[0] || 0) * 3600) + ((edits.value.duration[1] || 0) * 60) + (edits.value.duration[2] || 0)) || null
: undefined,
@@ -415,6 +449,12 @@ async function submit() {
}
}
+.date {
+ .input {
+ width: auto;
+ }
+}
+
.item-actions {
.icon {
padding: .25rem 1rem;
diff --git a/src/scenes.js b/src/scenes.js
index 0ad19ea..b10ac44 100644
--- a/src/scenes.js
+++ b/src/scenes.js
@@ -706,6 +706,7 @@ export async function fetchSceneRevisions(revisionId, filters = {}, reqUser) {
}
const keyMap = {
+ datePrecision: 'date_precision',
productionDate: 'production_date',
productionLocation: 'production_location',
productionCity: 'production_city',
@@ -784,6 +785,7 @@ async function applySceneRevision(revisionIds) {
'title',
'description',
'date',
+ 'datePrecision',
'duration',
'productionDate',
'productionLocation',