Skip to content

Commit

Permalink
chore: merge master into develop after 2.0.dev322 version tagging
Browse files Browse the repository at this point in the history
  • Loading branch information
admin-cloudforet committed Feb 22, 2025
2 parents e5b97c1 + 705ae73 commit 3dec916
Show file tree
Hide file tree
Showing 8 changed files with 72 additions and 38 deletions.
2 changes: 1 addition & 1 deletion apps/web/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "web",
"version": "2.0.0-dev321",
"version": "2.0.0-dev322",
"private": true,
"description": "Cloudforet Console Web Application",
"author": "Cloudforet",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,9 @@ const {
} = useWidgetFormQuery({
widgetId: computed(() => widgetGenerateState.widgetId),
});
const { cascadeUpdateDataTable } = useDataTableCascadeUpdate({
const {
cascadeUpdateDataTable,
} = useDataTableCascadeUpdate({
widgetId: computed(() => widgetGenerateState.widgetId),
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { PButton, PSpinner } from '@cloudforet/mirinae';
import { PButton } from '@cloudforet/mirinae';
interface Props {
disabled: boolean;
Expand Down Expand Up @@ -44,13 +44,11 @@ const handleUpdateDataTable = () => {
</p-button>
<p-button style-type="secondary"
class="apply-button"
:loading="props.loading"
:disabled="props.disabled || props.isLegacyDataTable"
@click="handleUpdateDataTable"
>
<div class="button-contents-wrapper">
<p-spinner v-if="props.loading"
size="sm"
/>
{{ $t('COMMON.WIDGETS.APPLY') }}
</div>
<div v-if="props.changed"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,9 @@ const {
} = useWidgetFormQuery({
widgetId: computed(() => widgetGenerateState.widgetId),
});
const { cascadeUpdateDataTable } = useDataTableCascadeUpdate({
const {
cascadeUpdateDataTable,
} = useDataTableCascadeUpdate({
widgetId: computed(() => widgetGenerateState.widgetId),
});
Expand Down Expand Up @@ -251,7 +253,6 @@ const { mutateAsync: updateWidget } = useMutation({
: keys.publicWidgetQueryKey;
queryClient.setQueryData(widgetQueryKey.value, () => data);
showSuccessMessage(i18n.t('COMMON.WIDGETS.DATA_TABLE.FORM.UPDATE_DATA_TALBE_INVALID_SUCCESS'), '');
widgetGenerateStore.setSelectedDataTableId(state.dataTableId);
},
onError: (e) => {
showErrorMessage(e.message, e);
Expand Down Expand Up @@ -431,6 +432,7 @@ const handleUpdateDataTable = async () => {
state: 'INACTIVE',
options: sanitizedOptions,
});
widgetGenerateStore.setSelectedDataTableId(result.data_table_id);
await cascadeUpdateDataTable(result.data_table_id);
}
setTimeout(() => {
Expand Down Expand Up @@ -559,7 +561,7 @@ defineExpose({
/>
<widget-form-data-table-card-footer :disabled="state.applyDisabled"
:changed="state.optionsChanged"
:loading="state.loading || props.loading"
:loading="state.loading || props.loading || !!widgetGenerateState.dataTableCasCadeUpdateLoadingMap?.[props.item.data_table_id]"
@delete="handleClickDeleteDataTable"
@reset="handleClickResetDataTable"
@update="handleUpdateDataTable"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import type { ComputedRef } from 'vue';
import { computed, reactive } from 'vue';
import {
computed, reactive,
} from 'vue';

import type { ListResponse } from '@/api-clients/_common/schema/api-verbs/list';

import ErrorHandler from '@/common/composables/error/errorHandler';
import { useWidgetFormQuery } from '@/common/modules/widgets/_composables/use-widget-form-query';
import { createDataTableReferenceMap } from '@/common/modules/widgets/_helpers/widget-data-table-helper';
import { useWidgetGenerateStore } from '@/common/modules/widgets/_store/widget-generate-store';
import type { DataTableModel, DataTableReference } from '@/common/modules/widgets/types/widget-data-table-type';


Expand All @@ -17,6 +21,9 @@ interface UseDataTableCascadeUpdateReturn {
}

export const useDataTableCascadeUpdate = ({ widgetId }: UseDataTableCascadeUpdateOptions): UseDataTableCascadeUpdateReturn => {
const widgetGenerateStore = useWidgetGenerateStore();
const widgetGenerateState = widgetGenerateStore.state;

/* Query */
const {
dataTableList,
Expand Down Expand Up @@ -44,30 +51,50 @@ export const useDataTableCascadeUpdate = ({ widgetId }: UseDataTableCascadeUpdat
const cascadeUpdateDataTable = async (dataTableId: string) => {
const children = _state.dataTableReferenceMap[dataTableId].children;
return children.reduce((chain, childId) => chain.then(async () => {
const currentDataTable = dataTableList.value.find(
(_dataTable) => _dataTable.data_table_id === childId,
) as DataTableModel;

const result = await fetcher.updateDataTableFn({
data_table_id: childId,
name: currentDataTable?.name,
options: {
...(currentDataTable?.options ?? {}),
},
});
const dataTableListQueryKey = _state.isPrivate ? keys.privateDataTableListQueryKey : keys.publicDataTableListQueryKey;
await queryClient.setQueryData(dataTableListQueryKey.value, (oldData: ListResponse<DataTableModel>) => {
if (oldData.results) {
return {
...oldData,
results: oldData.results.map((item) => (item.data_table_id === result.data_table_id ? result : item)),
};
}
return oldData;
});
await _invalidateLoadQueries(result);

return cascadeUpdateDataTable(childId);
try {
widgetGenerateStore.setDataTableCasCadeUpdateLoadingMap({
...widgetGenerateState.dataTableCasCadeUpdateLoadingMap,
[childId]: true,
});

const currentDataTable = dataTableList.value.find(
(_dataTable) => _dataTable.data_table_id === childId,
) as DataTableModel;

const result = await fetcher.updateDataTableFn({
data_table_id: childId,
name: currentDataTable?.name,
options: {
...(currentDataTable?.options ?? {}),
},
});

const dataTableListQueryKey = _state.isPrivate
? keys.privateDataTableListQueryKey
: keys.publicDataTableListQueryKey;

await queryClient.setQueryData(dataTableListQueryKey.value, (oldData: ListResponse<DataTableModel>) => {
if (oldData?.results) {
return {
...oldData,
results: oldData.results.map((item) => (item.data_table_id === result.data_table_id ? result : item)),
};
}
return oldData;
});

await _invalidateLoadQueries(result);
await cascadeUpdateDataTable(childId);
} catch (error) {
ErrorHandler.handleError(error);
} finally {
setTimeout(() => {
widgetGenerateStore.setDataTableCasCadeUpdateLoadingMap({
...widgetGenerateState.dataTableCasCadeUpdateLoadingMap,
[childId]: false,
});
}, 500);
}
}), Promise.resolve());
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ export const useWidgetGenerateStore = defineStore('widget-generate', () => {
joinRestrictedMap: {} as JoinRestrictedMap, // Flag for handling Join type EXCEPTION RESTRICTION cases. (duplicated data field). Example - { '{dataTalbeId}': true, }
allDataTableInvalidMap: {} as Record<string, boolean>, // Flag for handling all data table invalid cases. Example - { '{dataTalbeId}': true, }
dataTableLoadFailed: false,
dataTableCasCadeUpdateLoadingMap: {} as Record<string, boolean>,
});

const getters = reactive({
Expand Down Expand Up @@ -80,6 +81,9 @@ export const useWidgetGenerateStore = defineStore('widget-generate', () => {
const setDataTableLoadFailed = (status: boolean) => {
state.dataTableLoadFailed = status;
};
const setDataTableCasCadeUpdateLoadingMap = (value: Record<string, boolean>) => {
state.dataTableCasCadeUpdateLoadingMap = value;
};

const mutations = {
setWidgetId,
Expand All @@ -95,6 +99,7 @@ export const useWidgetGenerateStore = defineStore('widget-generate', () => {
setAllDataTableInvalidMap,
setDataTableCreateLoading,
setDataTableLoadFailed,
setDataTableCasCadeUpdateLoadingMap,
};
const actions = {
/* Step 2 */
Expand Down
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cloudforet-console",
"version": "2.0.0-dev321",
"version": "2.0.0-dev322",
"private": true,
"workspaces": [
"apps/*",
Expand Down

0 comments on commit 3dec916

Please sign in to comment.