From db2d477ff2d0692baf5a8bb9b16803d2baa65892 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9C=D0=B0?= =?UTF-8?q?=D0=BB=D1=8E=D0=B3=D0=B8=D0=BD?= Date: Sat, 10 Aug 2024 12:32:46 +0500 Subject: [PATCH] feature to add image entity --- components.d.ts | 4 + package.json | 1 + src/components/CreateEntityMenu.vue | 40 +++++- src/components/EditImageEntityMenu.vue | 189 +++++++++++++++++++++++++ src/components/entities/ImageItem.vue | 122 ++++++++++++++++ src/helpers/index.ts | 25 ++++ src/interfaces/entities.ts | 3 +- src/modules/EntityItem.vue | 2 + src/output.css | 119 +++++++++++++--- src/pages/HomePage.vue | 11 +- yarn.lock | 31 ++++ 11 files changed, 513 insertions(+), 34 deletions(-) create mode 100644 src/components/EditImageEntityMenu.vue create mode 100644 src/components/entities/ImageItem.vue diff --git a/components.d.ts b/components.d.ts index 65ca4e7..88454d3 100644 --- a/components.d.ts +++ b/components.d.ts @@ -12,6 +12,9 @@ declare module 'vue' { CreateEntityMenu: typeof import('./src/components/CreateEntityMenu.vue')['default'] Divider: typeof import('primevue/divider')['default'] Drawer: typeof import('primevue/drawer')['default'] + EditImageEntityMenu: typeof import('./src/components/EditImageEntityMenu.vue')['default'] + EditTextEntityMenu: typeof import('./src/components/EditTextEntityMenu.vue')['default'] + ImageItem: typeof import('./src/components/entities/ImageItem.vue')['default'] LogoAndLabel: typeof import('./src/components/LogoAndLabel.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] @@ -19,6 +22,7 @@ declare module 'vue' { Splitter: typeof import('primevue/splitter')['default'] SplitterPanel: typeof import('primevue/splitterpanel')['default'] TextItem: typeof import('./src/components/entities/TextItem.vue')['default'] + Toast: typeof import('primevue/toast')['default'] Tree: typeof import('primevue/tree')['default'] UserInfoHeaderWithSettings: typeof import('./src/components/UserInfoHeaderWithSettings.vue')['default'] } diff --git a/package.json b/package.json index 0b289c8..15be684 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ }, "dependencies": { "@primevue/themes": "^4.0.4", + "@vueuse/components": "^10.11.1", "@vueuse/core": "^10.11.0", "@vueuse/integrations": "^10.11.0", "pinia": "^2.1.7", diff --git a/src/components/CreateEntityMenu.vue b/src/components/CreateEntityMenu.vue index 8f1f99f..2c70aad 100644 --- a/src/components/CreateEntityMenu.vue +++ b/src/components/CreateEntityMenu.vue @@ -1,8 +1,42 @@ + + + + diff --git a/src/components/entities/ImageItem.vue b/src/components/entities/ImageItem.vue new file mode 100644 index 0000000..d9c5870 --- /dev/null +++ b/src/components/entities/ImageItem.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/src/helpers/index.ts b/src/helpers/index.ts index b53eb64..a36d3f0 100644 --- a/src/helpers/index.ts +++ b/src/helpers/index.ts @@ -34,3 +34,28 @@ export const editEntity = (newState: IEntity, entityUuid: string) => { }); dataStore.editHomeEntities(prevState); }; + +export const deleteEntity = (entityUuid: string) => { + const dataStore = useDataStore(); + let prevState = dataStore.homeEntities; + prevState = prevState.filter((entity: IEntity) => entity.uuid !== entityUuid); + dataStore.editHomeEntities(prevState); +}; + +export const changeOrderHomeEntity = (entityUuid: string, direction: 'up' | 'down') => { + const dataStore = useDataStore(); + const prevState = dataStore.homeEntities; + const entityIndex = prevState.findIndex((entity: IEntity) => entity.uuid === entityUuid); + if (direction === 'up') { + [prevState[entityIndex], prevState[entityIndex - 1]] = [ + prevState[entityIndex - 1], + prevState[entityIndex] + ]; + } else { + [prevState[entityIndex], prevState[entityIndex + 1]] = [ + prevState[entityIndex + 1], + prevState[entityIndex] + ]; + } + dataStore.editHomeEntities(prevState); +}; diff --git a/src/interfaces/entities.ts b/src/interfaces/entities.ts index 5728cb7..fffff4d 100644 --- a/src/interfaces/entities.ts +++ b/src/interfaces/entities.ts @@ -31,8 +31,9 @@ export interface IText { export interface IImage { type: 'image'; uuid: string; - name: string; + title: string; url: string; width: number; height: number; + position: 'left' | 'center' | 'right'; } diff --git a/src/modules/EntityItem.vue b/src/modules/EntityItem.vue index f485f61..01fb2f8 100644 --- a/src/modules/EntityItem.vue +++ b/src/modules/EntityItem.vue @@ -1,6 +1,7 @@