Add Fans table to hardware status page

Add Fan items at /redfish/v1/Chassis/chassis/Thermal endpoint
to table with expansion row to view details.

Signed-off-by: Yoshie Muranaka <yoshiemuranaka@gmail.com>
Change-Id: I1f69e30748f8dec62647468c4fd2e5b3947716d9
diff --git a/src/store/index.js b/src/store/index.js
index b4e030b..c4c0948 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -17,6 +17,7 @@
 import SystemStore from './modules/Health/SystemStore';
 import PowerSupplyStore from './modules/Health/PowerSupplyStore';
 import MemoryStore from './modules/Health/MemoryStore';
+import FanStore from './modules/Health/FanStore';
 
 import WebSocketPlugin from './plugins/WebSocketPlugin';
 
@@ -42,7 +43,8 @@
     sslCertificates: SslCertificatesStore,
     serverLed: ServerLedStore,
     system: SystemStore,
-    memory: MemoryStore
+    memory: MemoryStore,
+    fan: FanStore
   },
   plugins: [WebSocketPlugin]
 });
diff --git a/src/store/modules/Health/FanStore.js b/src/store/modules/Health/FanStore.js
new file mode 100644
index 0000000..2de388b
--- /dev/null
+++ b/src/store/modules/Health/FanStore.js
@@ -0,0 +1,35 @@
+import api from '@/store/api';
+
+const FanStore = {
+  namespaced: true,
+  state: {
+    fans: []
+  },
+  getters: {
+    fans: state => state.fans
+  },
+  mutations: {
+    setFanInfo: (state, data) => {
+      state.fans = data.map(fan => {
+        const { MemberId, Status = {}, PartNumber, SerialNumber } = fan;
+        return {
+          id: MemberId,
+          health: Status.Health,
+          partNumber: PartNumber,
+          serialNumber: SerialNumber,
+          statusState: Status.State
+        };
+      });
+    }
+  },
+  actions: {
+    async getFanInfo({ commit }) {
+      return await api
+        .get('/redfish/v1/Chassis/chassis/Thermal')
+        .then(({ data: { Fans = [] } }) => commit('setFanInfo', Fans))
+        .catch(error => console.log(error));
+    }
+  }
+};
+
+export default FanStore;