IA update: Update configuration to settings

This is the fourth update to information architecture changes and has
the following changes:

- The configuration section is updated to settings
- The date and time settings page is updated to date and time
- The network settings page is updated to network
- The power restore policy page in operations section is moved to
settings section

Signed-off-by: Sandeepa Singh <sandeepa.singh@ibm.com>
Change-Id: I6f5ab25f5227530be430bd39a4d9629b3bf09d8b
diff --git a/src/store/modules/Settings/DateTimeStore.js b/src/store/modules/Settings/DateTimeStore.js
new file mode 100644
index 0000000..51b722a
--- /dev/null
+++ b/src/store/modules/Settings/DateTimeStore.js
@@ -0,0 +1,81 @@
+import api from '@/store/api';
+import i18n from '@/i18n';
+
+const DateTimeStore = {
+  namespaced: true,
+  state: {
+    ntpServers: [],
+    isNtpProtocolEnabled: null,
+  },
+  getters: {
+    ntpServers: (state) => state.ntpServers,
+    isNtpProtocolEnabled: (state) => state.isNtpProtocolEnabled,
+  },
+  mutations: {
+    setNtpServers: (state, ntpServers) => (state.ntpServers = ntpServers),
+    setIsNtpProtocolEnabled: (state, isNtpProtocolEnabled) =>
+      (state.isNtpProtocolEnabled = isNtpProtocolEnabled),
+  },
+  actions: {
+    async getNtpData({ commit }) {
+      return await api
+        .get('/redfish/v1/Managers/bmc/NetworkProtocol')
+        .then((response) => {
+          const ntpServers = response.data.NTP.NTPServers;
+          const isNtpProtocolEnabled = response.data.NTP.ProtocolEnabled;
+          commit('setNtpServers', ntpServers);
+          commit('setIsNtpProtocolEnabled', isNtpProtocolEnabled);
+        })
+        .catch((error) => {
+          console.log(error);
+        });
+    },
+    async updateDateTime({ state }, dateTimeForm) {
+      const ntpData = {
+        NTP: {
+          ProtocolEnabled: dateTimeForm.ntpProtocolEnabled,
+        },
+      };
+      if (dateTimeForm.ntpProtocolEnabled) {
+        ntpData.NTP.NTPServers = dateTimeForm.ntpServersArray;
+      }
+      return await api
+        .patch(`/redfish/v1/Managers/bmc/NetworkProtocol`, ntpData)
+        .then(async () => {
+          if (!dateTimeForm.ntpProtocolEnabled) {
+            const dateTimeData = {
+              DateTime: dateTimeForm.updatedDateTime,
+            };
+            /**
+             * https://github.com/openbmc/phosphor-time-manager/blob/master/README.md#special-note-on-changing-ntp-setting
+             * When time mode is initially set to Manual from NTP,
+             * NTP service is disabled and the NTP service is
+             * stopping but not stopped, setting time will return an error.
+             * There are no responses from backend to notify when NTP is stopped.
+             * To work around, a timeout is set to allow NTP to fully stop
+             * TODO: remove timeout if backend solves
+             * https://github.com/openbmc/openbmc/issues/3459
+             */
+            const timeoutVal = state.isNtpProtocolEnabled ? 20000 : 0;
+            return await new Promise((resolve, reject) => {
+              setTimeout(() => {
+                return api
+                  .patch(`/redfish/v1/Managers/bmc`, dateTimeData)
+                  .then(() => resolve())
+                  .catch(() => reject());
+              }, timeoutVal);
+            });
+          }
+        })
+        .then(() => {
+          return i18n.t('pageDateTime.toast.successSaveDateTime');
+        })
+        .catch((error) => {
+          console.log(error);
+          throw new Error(i18n.t('pageDateTime.toast.errorSaveDateTime'));
+        });
+    },
+  },
+};
+
+export default DateTimeStore;