From 42e7e5d87cfb8a0e901cb8338b06c1e86e33f88d Mon Sep 17 00:00:00 2001 From: Dominik Zborowski Date: Thu, 7 Nov 2024 01:57:54 +0100 Subject: [PATCH] feat: grid mobile warning (#533) --- components/ModalTemplateDefault.vue | 2 +- domains/grid/components/GridView.vue | 16 ++++++++++++++++ public/images/grid.svg | 6 ++++++ stores/grid.ts | 3 +++ types/modal.ts | 7 +++++++ 5 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 public/images/grid.svg diff --git a/components/ModalTemplateDefault.vue b/components/ModalTemplateDefault.vue index 4bbd301f..cec99da9 100644 --- a/components/ModalTemplateDefault.vue +++ b/components/ModalTemplateDefault.vue @@ -7,7 +7,7 @@ const { modal, closeModal } = useModal()
diff --git a/domains/grid/components/GridView.vue b/domains/grid/components/GridView.vue index a599b6fa..fe4c20f8 100644 --- a/domains/grid/components/GridView.vue +++ b/domains/grid/components/GridView.vue @@ -11,6 +11,7 @@ const { gridRowHeightRatio, selectedGridId, isSavingGrid, + mobileLimitationsDisplayed, } = storeToRefs(useGridStore()) const { saveGrid, @@ -21,6 +22,8 @@ const { getGridById, gridsForTabs, } = useGrid() +const { showModal } = useModal() +const { formatMessage } = useIntl() const gridContainer = ref(null) const { width } = useElementSize(gridContainer) const gridWidgets = ref([]) @@ -161,6 +164,19 @@ watch( } else { hasUnsavedGrid.value = false } + + // show mobile limitations modal (only once) + if (isMobile.value && !mobileLimitationsDisplayed.value) { + showModal({ + data: { + icon: '/images/grid.svg', + title: formatMessage('grid_mobile_limitations_title'), + message: formatMessage('grid_mobile_limitations_message'), + confirmButtonText: formatMessage('grid_mobile_limitations_confirm'), + }, + }) + mobileLimitationsDisplayed.value = true + } } else { gridWidgets.value = getSelectedGridWidgets(updatedViewedGrid) } diff --git a/public/images/grid.svg b/public/images/grid.svg new file mode 100644 index 00000000..98c84b4f --- /dev/null +++ b/public/images/grid.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/stores/grid.ts b/stores/grid.ts index 08bf90b5..41278373 100644 --- a/stores/grid.ts +++ b/stores/grid.ts @@ -11,6 +11,7 @@ export const useGridStore = defineStore( const gridRowHeightRatio = ref(DEFAULT_GRID_ROW_HEIGHT_RATIO) const gridChainId = ref(DEFAULT_NETWORK_CHAIN_ID) const tempGrids = ref>({}) + const mobileLimitationsDisplayed = ref(false) // We use tempGrid as a proxy to the actual grid data stored in tempGrids const tempGrid = computed({ @@ -45,6 +46,7 @@ export const useGridStore = defineStore( selectedGridId, gridRowHeightRatio, gridChainId, + mobileLimitationsDisplayed, } }, { @@ -55,6 +57,7 @@ export const useGridStore = defineStore( 'selectedGridId', 'gridRowHeightRatio', 'gridChainId', + 'mobileLimitationsDisplayed', 'tempGrids', ], key: STORAGE_KEY.GRID_STORE, diff --git a/types/modal.ts b/types/modal.ts index 550b11f2..b7896abb 100644 --- a/types/modal.ts +++ b/types/modal.ts @@ -16,3 +16,10 @@ export type ModalQueryParams = { export type ModalData = { [key: string]: any } + +export type DefaultModalData = { + message: string + title?: string + confirmButtonText?: string + icon?: string +}