diff --git a/docs/.vitepress/theme/components/price-estimator/LabCard.vue b/docs/.vitepress/theme/components/price-estimator/LabCard.vue index 3a1c3b72e7..7bdfebc66e 100644 --- a/docs/.vitepress/theme/components/price-estimator/LabCard.vue +++ b/docs/.vitepress/theme/components/price-estimator/LabCard.vue @@ -138,12 +138,13 @@ const openSnackbar = (message: string) => { snackbar.value.show = true } -const removeComputeById = (computeId: number) => { - if (computeId === selectedCompute.value[0]?.id) { - openSnackbar("Cannot remove the default machine") +const removeMachine = (machine: ComputeUnit) => { + // if (machine.id === selectedCompute.value[0]?.id) { + if (machine.isDefault) { + openSnackbar("Cannot remove the home machine. Home machine is an essential component of your lab.") return } - priceEstimatorStore.removeComputeFromLab(props.lab.id, computeId) + priceEstimatorStore.removeComputeFromLab(props.lab.id, machine.id) } const removeStorageById = (storageId: number) => { @@ -191,8 +192,8 @@ const removeStorageById = (storageId: number) => { - c.id === item.id)!)"> - + c.id === item.id)!)"> + @@ -350,7 +351,7 @@ const removeStorageById = (storageId: number) => { - {{ snackbar.message }} + {{ snackbar.message }} diff --git a/docs/.vitepress/theme/components/price-estimator/LabModal.vue b/docs/.vitepress/theme/components/price-estimator/LabModal.vue index 6b4271069c..50419daab8 100644 --- a/docs/.vitepress/theme/components/price-estimator/LabModal.vue +++ b/docs/.vitepress/theme/components/price-estimator/LabModal.vue @@ -44,6 +44,7 @@ const save = () => { machineSubscription: formData.value.machineSubscription, hddSize: Number(formData.value.hddSize), nvmeSize: Number(formData.value.nvmeSize), + isDefault: true, }) emit("close") } diff --git a/docs/.vitepress/theme/components/price-estimator/MachineModal.vue b/docs/.vitepress/theme/components/price-estimator/MachineModal.vue index 7539fb2a4c..c3690f3714 100644 --- a/docs/.vitepress/theme/components/price-estimator/MachineModal.vue +++ b/docs/.vitepress/theme/components/price-estimator/MachineModal.vue @@ -22,14 +22,15 @@ const formData = ref({ gpu: undefined, gpu_count: 1, subscription: undefined, + isDefault: false, }) -const subscriptions = [ +let subscriptions = ref([ { text: "Commitment - 1 Year", value: "COMMITMENT_1Y" }, { text: "Commitment - 3 Years", value: "COMMITMENT_3Y" }, { text: "On demand", value: "ONDEMAND" }, { text: "Spot", value: "SPOT" }, -] +]) const getComputePriceYear = computed((): string | number => { if (!formData.value.machine_type || !formData.value.subscription) { @@ -144,6 +145,7 @@ const save = () => { subscription: subscription!, gpu: gpu, gpuCount: gpuCount, + isDefault: formData.value.isDefault!, }) } else { // Add new compute @@ -155,6 +157,7 @@ const save = () => { subscription: subscription!, gpu: gpu, gpu_count: gpuCount, + isDefault: formData.value.isDefault!, }) } @@ -166,6 +169,11 @@ onMounted(() => { formData.value.id = props.editData.id formData.value.name = props.editData.name formData.value.subscription = props.editData.subscription + formData.value.isDefault = props.editData.isDefault + + if (formData.value.isDefault) { + subscriptions.value = subscriptions.value.slice(0, 2) + } if (props.editData.machine_type.includes(" + ")) { const parts = props.editData.machine_type.split(" + ") @@ -178,7 +186,8 @@ onMounted(() => { } } else { formData.value.id = props.computeId - formData.value.name = `machine-${props.computeId + 1}` + const labName = priceEstimatorStore.labs[props.labId].title.toLowerCase().replace(" ", "-") + formData.value.name = `${labName}-iaas-${props.computeId}` } }) @@ -221,10 +230,10 @@ onMounted(() => { - + - + diff --git a/docs/.vitepress/theme/components/price-estimator/StorageModal.vue b/docs/.vitepress/theme/components/price-estimator/StorageModal.vue index d495305186..9cc896a030 100644 --- a/docs/.vitepress/theme/components/price-estimator/StorageModal.vue +++ b/docs/.vitepress/theme/components/price-estimator/StorageModal.vue @@ -74,22 +74,10 @@ onMounted(() => { - + - + l.id === labId) if (!lab) return @@ -499,6 +504,7 @@ export const priceEstimatorStore = reactive({ subscription: payload.subscription as SubscriptionType, monthlyPrice: prices.monthlyPrice, yearlyPrice: prices.yearlyPrice, + isDefault: payload.isDefault, } lab.selectedCompute = lab.selectedCompute || [] lab.selectedCompute.push(newCompute) @@ -509,7 +515,7 @@ export const priceEstimatorStore = reactive({ editComputeInLab( labId: number, computeId: number, - payload: { name: string; machine_type: string; core_count: number; ram: number; subscription: string; gpu?: string; gpuCount?: number }, + payload: { name: string; machine_type: string; core_count: number; ram: number; subscription: string; gpu?: string; gpuCount?: number; isDefault: boolean }, ) { const lab = this.labs.find((l) => l.id === labId) if (!lab || !lab.selectedCompute) return @@ -529,6 +535,7 @@ export const priceEstimatorStore = reactive({ subscription: payload.subscription as SubscriptionType, monthlyPrice: prices.monthlyPrice, yearlyPrice: prices.yearlyPrice, + isDefault: payload.isDefault, } this.saveStateToLocal() @@ -679,6 +686,11 @@ export const priceEstimatorStore = reactive({ if (labData.compute) { for (const comp of labData.compute) { + let isDefault = false + if (comp.name === `${labData.name.toLowerCase().replace(" ", "-")}-home`) { + isDefault = true + } + this.addComputeToLab(newLabId, { name: comp.name, machine_type: comp.machine_type, @@ -687,6 +699,7 @@ export const priceEstimatorStore = reactive({ subscription: comp.subscription, gpu: comp.gpu, gpu_count: comp.gpu_count, + isDefault: isDefault, }) } } diff --git a/docs/.vitepress/theme/components/price-estimator/types/index.ts b/docs/.vitepress/theme/components/price-estimator/types/index.ts index d9c6c1554d..72d93ae281 100644 --- a/docs/.vitepress/theme/components/price-estimator/types/index.ts +++ b/docs/.vitepress/theme/components/price-estimator/types/index.ts @@ -33,6 +33,7 @@ export interface ComputeUnit { subscription: SubscriptionType monthlyPrice: number yearlyPrice: number + isDefault: boolean } export interface StorageUnit { @@ -92,6 +93,7 @@ export interface MachineFormData { gpu?: string gpu_count?: number subscription?: SubscriptionType + isDefault?: boolean } export interface StorageFormData {