diff --git a/packages/client/hmi-client/src/components/models/tera-model.vue b/packages/client/hmi-client/src/components/models/tera-model.vue index b29ce015cd..44b5176b75 100644 --- a/packages/client/hmi-client/src/components/models/tera-model.vue +++ b/packages/client/hmi-client/src/components/models/tera-model.vue @@ -572,7 +572,7 @@ import { } from '@/model-representation/petrinet/petrinet-service'; import { RouteName } from '@/router/routes'; import { getCuriesEntities } from '@/services/concept'; -import { createModel, getModel, updateModel } from '@/services/model'; +import { createModel, getModel, getModelConfigurations, updateModel } from '@/services/model'; import * as ProjectService from '@/services/project'; import { getRelatedArtifacts } from '@/services/provenance'; import { ResultType, FeatureConfig } from '@/types/common'; @@ -936,6 +936,7 @@ async function confirmEdit() { if (model.value && transientTableValue.value) { const { tableType, idx, updateProperty } = transientTableValue.value; const modelClone = cloneDeep(model.value); + const modelConfigs = await getModelConfigurations(model?.value?.id); switch (tableType) { case 'parameters': @@ -950,7 +951,9 @@ async function confirmEdit() { // note that this is making a call to an async function to update the different model configs // but we don't need to wait for it to finish because we don't need immediate access to the model configs - updateConfigFields(model.value!.id, ode.parameters![idx][key], value as string); + if (modelConfigs) { + updateConfigFields(modelConfigs, ode.parameters![idx][key], value as string); + } } }); } diff --git a/packages/client/hmi-client/src/model-representation/petrinet/petrinet-service.ts b/packages/client/hmi-client/src/model-representation/petrinet/petrinet-service.ts index 31787d26ef..313cf57028 100644 --- a/packages/client/hmi-client/src/model-representation/petrinet/petrinet-service.ts +++ b/packages/client/hmi-client/src/model-representation/petrinet/petrinet-service.ts @@ -1,9 +1,14 @@ import _, { cloneDeep } from 'lodash'; import API from '@/api/api'; import { IGraph } from '@graph-scaffolder/types'; -import { PetriNetModel, Model, PetriNetTransition, TypingSemantics } from '@/types/Types'; +import { + PetriNetModel, + Model, + PetriNetTransition, + TypingSemantics, + ModelConfiguration +} from '@/types/Types'; import { PetriNet } from '@/petrinet/petrinet-service'; -import { getModelConfigurations } from '@/services/model'; import { updateModelConfiguration } from '@/services/model-configurations'; export interface NodeData { @@ -160,30 +165,6 @@ export const convertToIGraph = (amr: Model) => { const DUMMY_VALUE = -999; export const convertToAMRModel = (g: IGraph) => g.amr; -export const newAMR = (modelName: string) => { - const amr: Model = { - id: '', - name: modelName, - description: '', - schema: - 'https://raw.githubusercontent.com/DARPA-ASKEM/Model-Representations/petrinet_v0.5/petrinet/petrinet_schema.json', - schema_name: 'petrinet', - model_version: '0.1', - model: { - states: [], - transitions: [] - }, - semantics: { - ode: { - rates: [], - initials: [], - parameters: [] - } - } - }; - return amr; -}; - export const addState = (amr: Model, id: string, name: string) => { if (amr.model.states.find((s) => s.id === id)) { return; @@ -516,9 +497,11 @@ export const updateParameterId = (amr: Model, id: string, newId: string) => { } }; -export const updateConfigFields = async (modelId: string, id: string, newId: string) => { - const modelConfigs = await getModelConfigurations(modelId); - +export const updateConfigFields = async ( + modelConfigs: ModelConfiguration[], + id: string, + newId: string +) => { modelConfigs.forEach((config) => { updateParameterId(config.configuration, id, newId); // note that this is making an async call but we don't need to wait for it to finish @@ -682,3 +665,27 @@ export const extractStateMatrixData = (amr: Model, stateIds: string[], dimension }); return results; }; + +export function newAMR(modelName: string) { + const amr: Model = { + id: '', + name: modelName, + description: '', + schema: + 'https://raw.githubusercontent.com/DARPA-ASKEM/Model-Representations/petrinet_v0.5/petrinet/petrinet_schema.json', + schema_name: 'petrinet', + model_version: '0.1', + model: { + states: [], + transitions: [] + }, + semantics: { + ode: { + rates: [], + initials: [], + parameters: [] + } + } + }; + return amr; +} diff --git a/packages/client/hmi-client/src/page/project/components/tera-model-modal.vue b/packages/client/hmi-client/src/page/project/components/tera-model-modal.vue new file mode 100644 index 0000000000..541ef1e7a1 --- /dev/null +++ b/packages/client/hmi-client/src/page/project/components/tera-model-modal.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/packages/client/hmi-client/src/page/project/components/tera-project-overview.vue b/packages/client/hmi-client/src/page/project/components/tera-project-overview.vue index 4bbc4f61bd..eb20a1b1d1 100644 --- a/packages/client/hmi-client/src/page/project/components/tera-project-overview.vue +++ b/packages/client/hmi-client/src/page/project/components/tera-project-overview.vue @@ -61,12 +61,12 @@ size="large" icon="pi pi-share-alt" class="p-button p-button-secondary quick-link-button" - @click="isNewModelModalVisible = true" + @click="emit('open-new-asset', ProjectAssetTypes.MODELS)" />