1import IconDashboard from '@carbon/icons-vue/es/dashboard/16';
2import IconTextLinkAnalysis from '@carbon/icons-vue/es/text-link--analysis/16';
3import IconDataCheck from '@carbon/icons-vue/es/data--check/16';
4import IconSettingsAdjust from '@carbon/icons-vue/es/settings--adjust/16';
5import IconSettings from '@carbon/icons-vue/es/settings/16';
6import IconSecurity from '@carbon/icons-vue/es/security/16';
7import IconChevronUp from '@carbon/icons-vue/es/chevron--up/16';
8import IconDataBase from '@carbon/icons-vue/es/data--base--alt/16';
9
10const AppNavigationMixin = {
11  components: {
12    iconOverview: IconDashboard,
13    iconLogs: IconTextLinkAnalysis,
14    iconHealth: IconDataCheck,
15    iconControl: IconSettingsAdjust,
16    iconSettings: IconSettings,
17    iconSecurityAndAccess: IconSecurity,
18    iconExpand: IconChevronUp,
19    iconResourceManagement: IconDataBase,
20  },
21  data() {
22    return {
23      navigationItems: [
24        {
25          id: 'overview',
26          label: this.$t('appNavigation.overview'),
27          route: '/',
28          icon: 'iconOverview',
29        },
30        {
31          id: 'logs',
32          label: this.$t('appNavigation.logs'),
33          icon: 'iconLogs',
34          children: [
35            {
36              id: 'dumps',
37              label: this.$t('appNavigation.dumps'),
38              route: '/logs/dumps',
39            },
40            {
41              id: 'event-logs',
42              label: this.$t('appNavigation.eventLogs'),
43              route: '/logs/event-logs',
44            },
45            {
46              id: 'post-code-logs',
47              label: this.$t('appNavigation.postCodeLogs'),
48              route: '/logs/post-code-logs',
49            },
50          ],
51        },
52        {
53          id: 'hardware-status',
54          label: this.$t('appNavigation.hardwareStatus'),
55          icon: 'iconHealth',
56          children: [
57            {
58              id: 'inventory',
59              label: this.$t('appNavigation.inventory'),
60              route: '/hardware-status/inventory',
61            },
62            {
63              id: 'sensors',
64              label: this.$t('appNavigation.sensors'),
65              route: '/hardware-status/sensors',
66            },
67          ],
68        },
69        {
70          id: 'operations',
71          label: this.$t('appNavigation.operations'),
72          icon: 'iconControl',
73          children: this.operationsNavigationItems(),
74        },
75        {
76          id: 'settings',
77          label: this.$t('appNavigation.settings'),
78          icon: 'iconSettings',
79          children: [
80            {
81              id: 'date-time',
82              label: this.$t('appNavigation.dateTime'),
83              route: '/settings/date-time',
84            },
85            {
86              id: 'network',
87              label: this.$t('appNavigation.network'),
88              route: '/settings/network',
89            },
90            {
91              id: 'power-restore-policy',
92              label: this.$t('appNavigation.powerRestorePolicy'),
93              route: '/settings/power-restore-policy',
94            },
95          ],
96        },
97        {
98          id: 'security-and-access',
99          label: this.$t('appNavigation.securityAndAccess'),
100          icon: 'iconSecurityAndAccess',
101          children: [
102            {
103              id: 'sessions',
104              label: this.$t('appNavigation.sessions'),
105              route: '/security-and-access/sessions',
106            },
107            {
108              id: 'ldap',
109              label: this.$t('appNavigation.ldap'),
110              route: '/security-and-access/ldap',
111            },
112            {
113              id: 'user-management',
114              label: this.$t('appNavigation.userManagement'),
115              route: '/security-and-access/user-management',
116            },
117            {
118              id: 'policies',
119              label: this.$t('appNavigation.policies'),
120              route: '/security-and-access/policies',
121            },
122            {
123              id: 'certificates',
124              label: this.$t('appNavigation.certificates'),
125              route: '/security-and-access/certificates',
126            },
127          ],
128        },
129        {
130          id: 'resource-management',
131          label: this.$t('appNavigation.resourceManagement'),
132          icon: 'iconResourceManagement',
133          children: [
134            {
135              id: 'power',
136              label: this.$t('appNavigation.power'),
137              route: '/resource-management/power',
138            },
139          ],
140        },
141      ],
142    };
143  },
144  methods: {
145    operationsNavigationItems() {
146      const username = this.$store.getters['global/username'];
147      let operationNavigationItems = [
148        {
149          id: 'factory-reset',
150          label: this.$t('appNavigation.factoryReset'),
151          route: '/operations/factory-reset',
152        },
153        {
154          id: 'firmware',
155          label: this.$t('appNavigation.firmware'),
156          route: '/operations/firmware',
157        },
158        {
159          id: 'reboot-bmc',
160          label: this.$t('appNavigation.rebootBmc'),
161          route: '/operations/reboot-bmc',
162        },
163        {
164          id: 'serial-over-lan',
165          label: this.$t('appNavigation.serialOverLan'),
166          route: '/operations/serial-over-lan',
167        },
168        {
169          id: 'server-power-operations',
170          label: this.$t('appNavigation.serverPowerOperations'),
171          route: '/operations/server-power-operations',
172        },
173      ];
174      let pageKeyClear = {
175        id: 'key-clear',
176        label: this.$t('appNavigation.keyClear'),
177        route: '/operations/key-clear',
178      };
179      if (username === 'service' || username === 'admin') {
180        operationNavigationItems.splice(2, 0, pageKeyClear);
181      }
182      return operationNavigationItems;
183    },
184  },
185};
186
187export default AppNavigationMixin;
188