Add Dimms table missing properties

- Added the following properties: Model, Description, Spare part number,
Location Number, Memory type, Memory size, Identify led

- Design has been updated for Dimms table on inventory page

Signed-off-by: Sandeepa Singh <sandeepa.singh@ibm.com>
Change-Id: Ife61396bd70c29df1b5ea55091adc8c6813b5cdc
diff --git a/src/locales/en-US.json b/src/locales/en-US.json
index 5c457d6..35e7146 100644
--- a/src/locales/en-US.json
+++ b/src/locales/en-US.json
@@ -403,11 +403,13 @@
       "manufacturer": "Manufacturer",
       "maxConcurrentSessions": "Max concurrent sessions",
       "maxSpeedMHz": "Max speed MHz",
-      "minSpeedMHz": "Min speed MHz",
       "maxPowerWatts": "Max power watts",
-      "minPowerWatts": "Min power watts",
-      "model": "Model",
+      "memoryType": "Memory type",
+      "memorySize": "Memory size",
       "memorySummary": "Memory summary",
+      "minPowerWatts": "Min power watts",
+      "minSpeedMHz": "Min speed MHz",
+      "model": "Model",
       "name": "Name",
       "partNumber": "Part number",
       "power": "Power",
diff --git a/src/store/modules/HardwareStatus/MemoryStore.js b/src/store/modules/HardwareStatus/MemoryStore.js
index cd2478d..6f6abe5 100644
--- a/src/store/modules/HardwareStatus/MemoryStore.js
+++ b/src/store/modules/HardwareStatus/MemoryStore.js
@@ -1,4 +1,5 @@
 import api from '@/store/api';
+import i18n from '@/i18n';
 
 const MemoryStore = {
   namespaced: true,
@@ -11,13 +12,31 @@
   mutations: {
     setMemoryInfo: (state, data) => {
       state.dimms = data.map(({ data }) => {
-        const { Id, Status = {}, PartNumber, SerialNumber } = data;
+        const {
+          Id,
+          Status = {},
+          PartNumber,
+          SerialNumber,
+          SparePartNumber,
+          Description,
+          MemoryType,
+          MemorySize,
+          LocationIndicatorActive,
+          Location,
+        } = data;
         return {
           id: Id,
           health: Status.Health,
           partNumber: PartNumber,
           serialNumber: SerialNumber,
           statusState: Status.State,
+          sparePartNumber: SparePartNumber,
+          description: Description,
+          memoryType: MemoryType,
+          memorySize: MemorySize,
+          identifyLed: LocationIndicatorActive,
+          uri: data['@odata.id'],
+          locationNumber: Location?.PartLocation?.ServiceLabel,
         };
       });
     },
@@ -33,6 +52,23 @@
         .then((response) => commit('setMemoryInfo', response))
         .catch((error) => console.log(error));
     },
+    async updateIdentifyLedValue({ dispatch }, led) {
+      const uri = led.uri;
+      const updatedIdentifyLedValue = {
+        LocationIndicatorActive: led.identifyLed,
+      };
+      return await api.patch(uri, updatedIdentifyLedValue).catch((error) => {
+        dispatch('getDimms');
+        console.log('error', error);
+        if (led.identifyLed) {
+          throw new Error(i18n.t('pageInventory.toast.errorEnableIdentifyLed'));
+        } else {
+          throw new Error(
+            i18n.t('pageInventory.toast.errorDisableIdentifyLed')
+          );
+        }
+      });
+    },
   },
 };
 
diff --git a/src/views/HardwareStatus/Inventory/InventoryTableDimmSlot.vue b/src/views/HardwareStatus/Inventory/InventoryTableDimmSlot.vue
index 5d8db83..07f42d2 100644
--- a/src/views/HardwareStatus/Inventory/InventoryTableDimmSlot.vue
+++ b/src/views/HardwareStatus/Inventory/InventoryTableDimmSlot.vue
@@ -49,13 +49,63 @@
         <status-icon :status="statusIcon(value)" />
         {{ value }}
       </template>
-
+      <!-- Toggle identify LED -->
+      <template #cell(identifyLed)="row">
+        <b-form-checkbox
+          v-model="row.item.identifyLed"
+          name="switch"
+          switch
+          @change="toggleIdentifyLedValue(row.item)"
+        >
+          <span v-if="row.item.identifyLed">
+            {{ $t('global.status.on') }}
+          </span>
+          <span v-else> {{ $t('global.status.off') }} </span>
+        </b-form-checkbox>
+      </template>
       <template #row-details="{ item }">
         <b-container fluid>
           <b-row>
-            <b-col sm="6" xl="4">
+            <b-col sm="6" xl="6">
               <dl>
-                <!-- Status state -->
+                <!-- Part Number -->
+                <dt>{{ $t('pageInventory.table.partNumber') }}:</dt>
+                <dd>{{ dataFormatter(item.partNumber) }}</dd>
+              </dl>
+              <dl>
+                <!-- Serial Number -->
+                <dt>{{ $t('pageInventory.table.serialNumber') }}:</dt>
+                <dd>{{ dataFormatter(item.serialNumber) }}</dd>
+              </dl>
+              <dl>
+                <!-- Spare Part Number -->
+                <dt>{{ $t('pageInventory.table.sparePartNumber') }}:</dt>
+                <dd>{{ dataFormatter(item.sparePartNumber) }}</dd>
+              </dl>
+              <dl>
+                <!-- Model -->
+                <dt>{{ $t('pageInventory.table.model') }}:</dt>
+                <dd>{{ dataFormatter(item.model) }}</dd>
+              </dl>
+              <dl>
+                <!-- Description -->
+                <dt>{{ $t('pageInventory.table.description') }}:</dt>
+                <dd>{{ dataFormatter(item.description) }}</dd>
+              </dl>
+              <dl>
+                <!-- Memory Type -->
+                <dt>{{ $t('pageInventory.table.memoryType') }}:</dt>
+                <dd>{{ dataFormatter(item.memoryType) }}</dd>
+              </dl>
+            </b-col>
+            <b-col sm="6" xl="6">
+              <dl>
+                <!-- Memory Size in kb -->
+                <dt>{{ $t('pageInventory.table.memorySize') }}:</dt>
+                <dd>{{ dataFormatter(item.memorySize) }} KB</dd>
+              </dl>
+              <dl>
+                <!-- Status-->
                 <dt>{{ $t('pageInventory.table.statusState') }}:</dt>
                 <dd>{{ dataFormatter(item.statusState) }}</dd>
               </dl>
@@ -99,32 +149,27 @@
           key: 'expandRow',
           label: '',
           tdClass: 'table-row-expand',
-          sortable: false,
         },
         {
           key: 'id',
           label: this.$t('pageInventory.table.id'),
           formatter: this.dataFormatter,
-          sortable: true,
         },
         {
           key: 'health',
           label: this.$t('pageInventory.table.health'),
           formatter: this.dataFormatter,
-          sortable: true,
           tdClass: 'text-nowrap',
         },
         {
-          key: 'partNumber',
-          label: this.$t('pageInventory.table.partNumber'),
+          key: 'locationNumber',
+          label: this.$t('pageInventory.table.locationNumber'),
           formatter: this.dataFormatter,
-          sortable: true,
         },
         {
-          key: 'serialNumber',
-          label: this.$t('pageInventory.table.serialNumber'),
+          key: 'identifyLed',
+          label: this.$t('pageInventory.table.identifyLed'),
           formatter: this.dataFormatter,
-          sortable: true,
         },
       ],
       searchFilter: searchFilter,
@@ -157,6 +202,14 @@
     onFiltered(filteredItems) {
       this.searchTotalFilteredRows = filteredItems.length;
     },
+    toggleIdentifyLedValue(row) {
+      this.$store
+        .dispatch('memory/updateIdentifyLedValue', {
+          uri: row.uri,
+          identifyLed: row.identifyLed,
+        })
+        .catch(({ message }) => this.errorToast(message));
+    },
   },
 };
 </script>