@appscode/design-system 1.0.43-alpha.13 → 1.0.43-alpha.132

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/base/utilities/_default.scss +283 -21
  2. package/base/utilities/_derived-variables.scss +0 -13
  3. package/base/utilities/_initial-variables.scss +78 -56
  4. package/base/utilities/_mixin.scss +10 -17
  5. package/base/utilities/_typography.scss +23 -7
  6. package/base/utilities/dark-theme.scss +25 -0
  7. package/components/_ac-accordion.scss +1 -0
  8. package/components/_ac-alert-box.scss +18 -10
  9. package/components/_ac-card.scss +55 -20
  10. package/components/_ac-code-highlight.scss +7 -1
  11. package/components/_ac-content-layout.scss +4 -4
  12. package/components/_ac-drag.scss +6 -6
  13. package/components/_ac-input.scss +74 -40
  14. package/components/_ac-modal.scss +5 -4
  15. package/components/_ac-multi-select.scss +195 -13
  16. package/components/_ac-options.scss +31 -16
  17. package/components/_ac-select-box.scss +15 -5
  18. package/components/_ac-table.scss +42 -36
  19. package/components/_ac-tabs.scss +72 -23
  20. package/components/_ac-tags.scss +2 -2
  21. package/components/_ac-terminal.scss +272 -0
  22. package/components/_app-drawer.scss +6 -6
  23. package/components/_breadcumb.scss +7 -2
  24. package/components/_buttons.scss +60 -27
  25. package/components/_card-body-wrapper.scss +3 -3
  26. package/components/_dashboard-header.scss +33 -1
  27. package/components/_direct-deploy.scss +69 -0
  28. package/components/_go-to-top.scss +1 -1
  29. package/components/_graph.scss +45 -0
  30. package/components/_image-upload.scss +6 -4
  31. package/components/_left-sidebar-menu.scss +200 -46
  32. package/components/_monaco-editor.scss +1 -1
  33. package/components/_navbar.scss +129 -26
  34. package/components/_overview-info.scss +4 -4
  35. package/components/_overview-page.scss +1 -2
  36. package/components/_pagination.scss +10 -2
  37. package/components/_payment-card.scss +28 -12
  38. package/components/_preview-modal.scss +19 -8
  39. package/components/_pricing-table.scss +1 -1
  40. package/components/_progress-bar.scss +5 -5
  41. package/components/_subscription-card.scss +15 -8
  42. package/components/_table-of-content.scss +1 -1
  43. package/components/_tfa.scss +69 -0
  44. package/components/_transitions.scss +261 -0
  45. package/components/_widget-menu.scss +9 -9
  46. package/components/_wizard.scss +31 -19
  47. package/components/ac-toaster/_ac-toasted.scss +5 -5
  48. package/components/bbum/_card-team.scss +18 -10
  49. package/components/bbum/_information-center.scss +17 -3
  50. package/components/bbum/_mobile-desktop.scss +6 -6
  51. package/components/bbum/_post.scss +5 -4
  52. package/components/bbum/_sign-up-notification.scss +6 -6
  53. package/components/bbum/_single-post-preview.scss +9 -9
  54. package/components/bbum/_user-profile.scss +97 -90
  55. package/components/ui-builder/_ui-builder.scss +29 -10
  56. package/components/ui-builder/_vue-open-api.scss +98 -0
  57. package/layouts/_404.scss +2 -1
  58. package/layouts/_code-preview.scss +14 -7
  59. package/main.scss +4 -0
  60. package/package.json +2 -7
  61. package/plugins/theme.js +130 -128
  62. package/vue-components/v2/banner/Banner.vue +2 -2
  63. package/vue-components/v2/breadcrumbs/Breadcrumb.vue +97 -0
  64. package/vue-components/v2/button/Button.vue +5 -0
  65. package/vue-components/v2/button/DownloadBtn.vue +45 -0
  66. package/vue-components/v2/card/PaymentCards.vue +11 -2
  67. package/vue-components/v2/content/ContentTable.vue +12 -7
  68. package/vue-components/v2/editor/Editor.vue +29 -1
  69. package/vue-components/v2/editor/FilteredFileEditor.vue +153 -0
  70. package/vue-components/v2/editor/ResourceKeyValueEditor.vue +196 -0
  71. package/vue-components/v2/loaders/ResourceLoader.vue +90 -0
  72. package/vue-components/v2/loaders/SidebarLoader.vue +32 -0
  73. package/vue-components/v2/modal/Modal.vue +33 -12
  74. package/vue-components/v2/modals/DeleteConfirmationModal.vue +77 -0
  75. package/vue-components/v2/modals/JsonShowModal.vue +12 -2
  76. package/vue-components/v2/navbar/Appdrawer.vue +10 -9
  77. package/vue-components/v2/navbar/ThemeMode.vue +120 -0
  78. package/vue-components/v2/navbar/User.vue +154 -12
  79. package/vue-components/v2/preloader/Preloader.vue +5 -5
  80. package/vue-components/v2/sidebar/ClusterSwitcher.vue +126 -0
  81. package/vue-components/v2/sidebar/SidebarItem.vue +23 -1
  82. package/vue-components/v2/sidebar/SidebarItemWithDropDown.vue +19 -20
  83. package/vue-components/v2/table/Table.vue +43 -8
  84. package/vue-components/v2/table/TableRow.vue +17 -8
  85. package/vue-components/v2/table/table-cell/CellValue.vue +31 -4
  86. package/vue-components/v2/table/table-cell/GenericCell.vue +56 -0
  87. package/vue-components/v2/table/table-cell/ObjectCell.vue +4 -1
  88. package/vue-components/v2/tabs/EditorTabs.vue +1 -1
  89. package/vue-components/v3/button/Button.vue +5 -0
  90. package/vue-components/v3/dropdown/DropdownMenu.vue +1 -1
  91. package/vue-components/v3/editor/Editor.vue +32 -11
  92. package/vue-components/v3/modal/Modal.vue +10 -1
  93. package/vue-components/v3/modals/JsonShowModal.vue +13 -4
  94. package/vue-components/v3/navbar/Appdrawer.vue +12 -7
  95. package/vue-components/v3/navbar/ThemeMode.vue +128 -0
  96. package/vue-components/v3/navbar/User.vue +154 -12
  97. package/vue-components/v3/sidebar/ClusterSwitcher.vue +133 -0
  98. package/vue-components/v3/sidebar/SidebarItemWithDropDown.vue +120 -0
  99. package/vue-components/v3/table/Table.vue +27 -5
  100. package/vue-components/v3/table/TableRow.vue +1 -1
  101. package/vue-components/v3/table/table-cell/CellValue.vue +26 -3
  102. package/vue-components/v3/table/table-cell/GenericCell.vue +62 -0
  103. package/vue-components/v3/table/table-cell/ObjectCell.vue +5 -1
  104. package/vue-components/v3/tabs/EditorTabs.vue +1 -1
@@ -1,10 +1,13 @@
1
1
  <template>
2
- <div class="app-drawer-wrapper d-table-cell">
3
- <div class="drawer-icon">
2
+ <div class="app-drawer-wrapper is-flex">
3
+ <div
4
+ class="drawer-icon is-flex is-justify-content-center is-align-items-center"
5
+ >
4
6
  <svg
5
7
  class="gb_We"
6
8
  focusable="false"
7
9
  viewBox="0 0 24 24"
10
+ style="width: 22px;margin-top: 2px;"
8
11
  :style="{ fill: 'white' }"
9
12
  >
10
13
  <path
@@ -20,16 +23,14 @@
20
23
  <article class="media">
21
24
  <figure class="media-left">
22
25
  <p class="image">
23
- <img
24
- :src="app.icon_url"
25
- />
26
+ <img :src="app.icon_url" />
26
27
  </p>
27
28
  </figure>
28
29
  <div class="media-content">
29
30
  <div class="content">
30
31
  <p>
31
- <strong>{{app.title}}</strong>
32
- <span>{{app.sub_title}}</span>
32
+ <strong>{{ app.title }}</strong>
33
+ <span>{{ app.sub_title }}</span>
33
34
  </p>
34
35
  </div>
35
36
  </div>
@@ -50,7 +51,7 @@ export default {
50
51
  }
51
52
  },
52
53
  components: {
53
- NavbarItemContent: () => import("./NavbarItemContent.vue"),
54
- },
54
+ NavbarItemContent: () => import("./NavbarItemContent.vue")
55
+ }
55
56
  };
56
57
  </script>
@@ -0,0 +1,120 @@
1
+ <template>
2
+ <div>
3
+ <button
4
+ v-if="themeMode"
5
+ class="button ac-nav-button"
6
+ style="color: #ffffff; font-size: 15px;"
7
+ @click="toggleTheme"
8
+ :title="themeModes[themeMode].displayName"
9
+ >
10
+ <i :class="`fa ${themeModes[themeMode].iconClass}`" />
11
+ </button>
12
+ <div class="ac-menu-content theme-choice">
13
+ <ul class="is-flex is-flex-direction-row is-justify-content-space-around">
14
+ <li
15
+ v-for="theme of Object.keys(themeModes)"
16
+ :title="themeModes[theme].displayName"
17
+ @click="themeMode = theme"
18
+ :class="{'is-active': themeMode === theme}"
19
+ :key="theme"
20
+ >
21
+ <i :class="['fa', themeModes[theme].iconClass]" />
22
+ </li>
23
+ </ul>
24
+ </div>
25
+ </div>
26
+ </template>
27
+ <script>
28
+ export default {
29
+ data() {
30
+ return {
31
+ themeMode: "",
32
+ themeModes: {
33
+ system: {
34
+ displayName: "System Theme",
35
+ iconClass: "fa-desktop",
36
+ },
37
+ light: {
38
+ displayName: "Light Theme",
39
+ iconClass: "fa-sun-o",
40
+ },
41
+ dark: {
42
+ displayName: "Dark Theme",
43
+ iconClass: "fa-moon-o",
44
+ }
45
+ }
46
+ };
47
+ },
48
+
49
+ mounted() {
50
+ // get theme mode from localStorage or set default one
51
+ this.themeMode = localStorage.getItem("themeMode") || "light";
52
+ },
53
+
54
+ destroyed() {
55
+ this.removeColorSchemeEventListener();
56
+ },
57
+
58
+ watch: {
59
+ themeMode: {
60
+ handler(n) {
61
+ this.onThemeModeChange(n);
62
+ }
63
+ }
64
+ },
65
+
66
+ methods: {
67
+ // handle theme mode button click
68
+ toggleTheme() {
69
+ if (this.themeMode === "light") this.themeMode = "dark";
70
+ else if (this.themeMode === "dark") this.themeMode = "system";
71
+ else if (this.themeMode === "system") this.themeMode = "light";
72
+ },
73
+
74
+ // triggered when theme mode is updated
75
+ onThemeModeChange(n) {
76
+ localStorage.setItem("themeMode", n);
77
+
78
+ let theme = n;
79
+ if (n === "system") {
80
+ const isDarkMode =
81
+ window.matchMedia &&
82
+ window.matchMedia("(prefers-color-scheme: dark)").matches;
83
+ this.addColorSchemeEventListener();
84
+ theme = isDarkMode ? "dark" : "light";
85
+ } else {
86
+ this.removeColorSchemeEventListener();
87
+ }
88
+ this.$emit("set:theme", theme);
89
+ this.handleDarkThemeClass(theme);
90
+ },
91
+
92
+ // add proper css class to update the ui theme
93
+ handleDarkThemeClass(currentTheme) {
94
+ if (currentTheme === "light") {
95
+ document.documentElement.classList.remove("is-dark-theme");
96
+ } else {
97
+ document.documentElement.classList.add("is-dark-theme");
98
+ }
99
+ },
100
+
101
+ // add system theme listener event
102
+ addColorSchemeEventListener() {
103
+ window
104
+ .matchMedia("(prefers-color-scheme: dark)")
105
+ .addEventListener("change", this.handleSystemThemeChange);
106
+ },
107
+
108
+ // remove system theme listener event
109
+ removeColorSchemeEventListener() {
110
+ window
111
+ .matchMedia("(prefers-color-scheme: dark)")
112
+ .removeEventListener("change", this.handleSystemThemeChange);
113
+ },
114
+
115
+ handleSystemThemeChange() {
116
+ this.onThemeModeChange(this.themeMode);
117
+ }
118
+ }
119
+ };
120
+ </script>
@@ -7,7 +7,7 @@
7
7
  <img :src="user.avatar_url" alt="User Photo" />
8
8
  </div>
9
9
  </button>
10
- <navbar-item-content>
10
+ <navbar-item-content class="navbar-dropdown-wrapper">
11
11
  <div v-if="user.username" class="user-profile-wrapper">
12
12
  <div class="profile-area">
13
13
  <div class="profile-photo">
@@ -15,23 +15,98 @@
15
15
  <button class="camera-icon"></button>
16
16
  </div>
17
17
  <div class="profile-info">
18
- <p>{{ user.username.toUpperCase() }}</p>
18
+ <p :title="user.username.toUpperCase()" class="is-ellipsis-1">{{ user.username.toUpperCase() }}</p>
19
19
  <a :href="`mailto:${user.email}`"> {{ user.email }}</a>
20
20
  </div>
21
21
  </div>
22
- <ul>
23
- <li>
22
+ <transition-group name="list" tag="ul">
23
+ <li key="settings">
24
24
  <a :href="`${serverDomain}/user/settings/`">Settings</a>
25
25
  </li>
26
- <template v-if="user.is_admin">
27
- <li>
28
- <a :href="`${serverDomain}/admin`"> Site Administration </a>
29
- </li>
30
- </template>
31
- <li>
26
+ <li v-if="user.is_admin" key="site-admin">
27
+ <a :href="`${serverDomain}/admin`">Site Administration</a>
28
+ </li>
29
+ <li v-if="showAccountSwitcher" :class="`is-${dropDownStatus}`" key="switcher">
30
+ <a class="
31
+ ac-dropdown-button
32
+ is-fullwidth
33
+ is-flex
34
+ is-justify-content-space-between
35
+ is-align-items-center
36
+ "
37
+ @click="toggleList()"
38
+ >
39
+ <span>Switch Account</span>
40
+ <span
41
+ ><i
42
+ :class="`fa fa-angle-${
43
+ dropDownStatus === 'open' ? 'up' : 'down'
44
+ }`"
45
+ ></i
46
+ ></span>
47
+ </a>
48
+ <transition-group name="list" tag="ul"
49
+ class="ac-vscrollbar"
50
+ ref="dropdownItems"
51
+ :style="{ maxHeight: dropDownSectionHeight }"
52
+ >
53
+ <li
54
+ v-for="(org, idx) in formattedOrganizations"
55
+ :key="org.username"
56
+ >
57
+ <a
58
+ class="is-flex is-align-items-center"
59
+ @click="onOrganizationClick(org.username)"
60
+ >
61
+ <div class="width-30 height-30 image">
62
+ <img
63
+ :src="org.avatar_url"
64
+ class="ac-user-profile is-rounded"
65
+ alt="icon"
66
+ />
67
+ </div>
68
+ <div
69
+ class="
70
+ is-flex
71
+ is-align-items-center
72
+ is-justify-content-space-between
73
+ is-fullwidth
74
+ ml-10
75
+ "
76
+ >
77
+ <div class="org-info">
78
+ <strong :title="org.username" class="is-ellipsis-1">{{ org.username }}</strong>
79
+ <p>
80
+ {{
81
+ org.isPersonalAccount
82
+ ? "Personal Account"
83
+ : "Organization"
84
+ }}
85
+ </p>
86
+ </div>
87
+ <span
88
+ v-if="idx === 0"
89
+ class="
90
+ material-icons-outlined
91
+ font-size-18
92
+ ml-10
93
+ is-pulled-right
94
+ "
95
+ >
96
+ check
97
+ </span>
98
+ </div>
99
+ </a>
100
+ </li>
101
+ </transition-group>
102
+ </li>
103
+ <li key="dashboard">
104
+ <a :href="`${serverDomain}/dashboard`"> Dashboard </a>
105
+ </li>
106
+ <li key="signout">
32
107
  <a :href="`${serverDomain}/user/logout`"> Sign out </a>
33
108
  </li>
34
- </ul>
109
+ </transition-group>
35
110
  </div>
36
111
  </navbar-item-content>
37
112
  </navbar-item>
@@ -40,6 +115,7 @@
40
115
  <script>
41
116
  export default {
42
117
  props: {
118
+ // active user info
43
119
  user: {
44
120
  type: Object,
45
121
  default: () => ({}),
@@ -48,11 +124,77 @@ export default {
48
124
  type: String,
49
125
  default: "",
50
126
  },
127
+ showAccountSwitcher: {
128
+ type: Boolean,
129
+ default: false,
130
+ },
131
+ // all available organization list including personal account
132
+ organizations: {
133
+ type: Array,
134
+ default: () => [],
135
+ },
51
136
  },
52
137
 
53
138
  components: {
54
139
  NavbarItem: () => import("./NavbarItem.vue"),
55
140
  NavbarItemContent: () => import("./NavbarItemContent.vue"),
56
141
  },
142
+
143
+ computed: {
144
+ formattedOrganizations() {
145
+ let activeUser;
146
+ const filteredList = this.organizations.filter((item) => {
147
+ if (item.username === this.user.username) {
148
+ activeUser = item;
149
+ } else {
150
+ return true;
151
+ }
152
+ return false;
153
+ });
154
+
155
+ filteredList.unshift(activeUser);
156
+
157
+ return filteredList || [];
158
+ },
159
+ },
160
+
161
+ data() {
162
+ return {
163
+ dropDownStatus: "close",
164
+ dropDownSectionHeight: null,
165
+ };
166
+ },
167
+
168
+ methods: {
169
+ toggleList() {
170
+ this.dropDownStatus = this.dropDownStatus === "open" ? "close" : "open";
171
+ },
172
+ onOrganizationClick(orgName) {
173
+ this.$refs["dropdownItems"].$el.scrollTo(0, 0);
174
+ this.$emit("activeorg$set", orgName);
175
+ },
176
+ },
177
+
178
+ watch: {
179
+ dropDownStatus: {
180
+ immediate: true,
181
+ handler(n) {
182
+ if (n === "open") {
183
+ this.$nextTick(() => {
184
+ const dropDownUl = this.$refs["dropdownItems"];
185
+ if (dropDownUl)
186
+ this.dropDownSectionHeight = `${dropDownUl.scrollHeight}px`;
187
+ });
188
+ } else {
189
+ this.dropDownSectionHeight = null;
190
+ }
191
+ },
192
+ },
193
+ },
57
194
  };
58
- </script>
195
+ </script>
196
+ <style lang="scss" scoped>
197
+ .ac-vscrollbar {
198
+ overflow: auto !important;
199
+ }
200
+ </style>
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div
3
- class="is-flex is-justify-content-center is-align-items-center is-flex-direction-column"
3
+ class="is-flex is-justify-content-center is-align-items-center is-flex-direction-column ac-preloader"
4
4
  style="height: calc(100vh - 200px);"
5
5
  >
6
6
  <span v-if="showSpinner" class="spinner"></span>
@@ -15,12 +15,12 @@ export default {
15
15
  props: {
16
16
  showSpinner: {
17
17
  type: Boolean,
18
- default: true,
18
+ default: true
19
19
  },
20
20
  message: {
21
21
  type: String,
22
- default: "Fetching! Please wait for sometime...",
23
- },
24
- },
22
+ default: "Loading ..."
23
+ }
24
+ }
25
25
  };
26
26
  </script>
@@ -0,0 +1,126 @@
1
+ <template>
2
+ <div class="is-cluster-logo" v-if="sidebarCollapsed">
3
+ <img
4
+ width="40"
5
+ :src="getProviderIcon(selectedCluster && selectedCluster.provider)"
6
+ onerror="this.onerror=null;this.src='https://cdn.appscode.com/images/cloud-provider-icons/Generic.png';"
7
+ alt="provider-icon"
8
+ />
9
+ </div>
10
+ <multiselect
11
+ v-else
12
+ v-model="selectedCluster"
13
+ placeholder="Selected Cluster"
14
+ label="name"
15
+ track-by="name"
16
+ :options="clusterOptions"
17
+ :allow-empty="false"
18
+ deselectLabel=""
19
+ selectLabel=""
20
+ selectedLabel=""
21
+ >
22
+ <template slot="singleLabel" slot-scope="props">
23
+ <div class="is-flex is-align-items-center">
24
+ <img
25
+ :src="getProviderIcon(props.option.provider)"
26
+ onerror="this.onerror=null;this.src='https://cdn.appscode.com/images/cloud-provider-icons/Generic.png';"
27
+ alt="No cluster selected"
28
+ /><span
29
+ ><span>{{ props.option.displayName }}</span></span
30
+ >
31
+ </div>
32
+ </template>
33
+ <template slot="option" slot-scope="props">
34
+ <div class="is-flex is-align-items-center">
35
+ <img
36
+ class="mr-15"
37
+ :src="getProviderIcon(props.option.provider)"
38
+ onerror="this.onerror=null;this.src='https://cdn.appscode.com/images/cloud-provider-icons/Generic.png';"
39
+ alt="No cluster selected"
40
+ />
41
+ <div>
42
+ <p>{{ props.option.displayName }}</p>
43
+ <p class="location">{{ props.option.location }}</p>
44
+ </div>
45
+ </div>
46
+ </template>
47
+ </multiselect>
48
+ </template>
49
+
50
+ <script>
51
+ export default {
52
+ props: {
53
+ sidebarCollapsed: {
54
+ type: Boolean,
55
+ default: false,
56
+ },
57
+ mouseHover: {
58
+ type: Boolean,
59
+ default: false,
60
+ },
61
+ clusterOptions: {
62
+ type: Array,
63
+ default: [],
64
+ },
65
+ value: {
66
+ type: String,
67
+ default: "",
68
+ }
69
+ },
70
+
71
+ components: {
72
+ Multiselect: () => import("vue-multiselect"),
73
+ },
74
+
75
+ data() {
76
+ return {
77
+ selectedCluster: null,
78
+ selectedClusterName: "",
79
+ };
80
+ },
81
+
82
+ methods: {
83
+ getProviderIcon(provider) {
84
+ return `https://cdn.appscode.com/images/cloud-provider-icons/${provider}.png`;
85
+ },
86
+ },
87
+
88
+ watch: {
89
+ value: {
90
+ immediate: true,
91
+ handler(n) {
92
+ this.selectedClusterName = n;
93
+ },
94
+ },
95
+ selectedCluster: {
96
+ deep: true,
97
+ handler(n) {
98
+ this.selectedClusterName = n.name;
99
+ },
100
+ },
101
+ selectedClusterName(n) {
102
+ if (this.selectedCluster && n !== this.selectedCluster.name) {
103
+ this.clusterOptions.forEach((item) => {
104
+ if (this.selectedClusterName === item.name) {
105
+ this.selectedCluster = item;
106
+ }
107
+ });
108
+ }
109
+ this.$emit("input", n);
110
+ },
111
+ clusterOptions: {
112
+ deep: true,
113
+ immediate: true,
114
+ async handler(list) {
115
+ if (list) {
116
+ list.forEach(async (item) => {
117
+ if(item.name === this.selectedClusterName) {
118
+ this.selectedCluster = item;
119
+ }
120
+ });
121
+ }
122
+ },
123
+ },
124
+ },
125
+ };
126
+ </script>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <li>
2
+ <li ref="sidebarItem">
3
3
  <router-link
4
4
  :id="id"
5
5
  :title="title"
@@ -38,5 +38,27 @@ export default {
38
38
  default: "@/assets/images/icons/basic.svg",
39
39
  },
40
40
  },
41
+ watch: {
42
+ isActive: {
43
+ immediate: true,
44
+ handler(n) {
45
+ if (n) {
46
+ this.$nextTick(() => {
47
+ setTimeout(() => {
48
+ const top = (this.$refs.sidebarItem && this.$refs.sidebarItem.getBoundingClientRect().top) || 0;
49
+ // preventing scroll to options that are already visible
50
+ if (top > window.innerHeight - 200) {
51
+ // scroll to selected option item
52
+ this.$refs.sidebarItem.scrollIntoView({
53
+ behavior: 'smooth',
54
+ block: "center"
55
+ });
56
+ }
57
+ }, 500);
58
+ });
59
+ }
60
+ }
61
+ }
62
+ }
41
63
  };
42
64
  </script>
@@ -10,7 +10,7 @@
10
10
  </span>
11
11
  </a>
12
12
 
13
- <ul :ref="title" :style="{ maxHeight: dropDownSectionHeight }">
13
+ <ul ref="sectionItems" :style="{ maxHeight: dropDownSectionHeight }">
14
14
  <slot />
15
15
  </ul>
16
16
  </li>
@@ -23,10 +23,6 @@ export default {
23
23
  type: Boolean,
24
24
  default: false,
25
25
  },
26
- isLoaderActive: {
27
- type: Boolean,
28
- default: false,
29
- },
30
26
  title: {
31
27
  type: String,
32
28
  default: "Sidebar Item",
@@ -41,27 +37,32 @@ export default {
41
37
  return {
42
38
  dropDownStatus: "close",
43
39
  dropDownSectionHeight: null,
40
+ isCompMounted: false,
44
41
  };
45
42
  },
46
43
 
47
- watch: {
48
- isLoaderActive(n) {
49
- if (!n) {
50
- this.$nextTick(() => {
51
- // for expanding dropdown
52
- this.setDropdownMaxHeight("open");
53
- });
44
+ mounted() {
45
+ this.isCompMounted = true;
46
+ setTimeout(() => {
47
+ // for expanding dropdown
48
+ if (this.isDropDownOpen) {
49
+ this.setDropdownMaxHeight("open");
50
+ } else {
51
+ this.setDropdownMaxHeight("close");
54
52
  }
55
- },
53
+ }, 700);
54
+ },
55
+
56
+ watch: {
56
57
  title(n, o) {
57
- if (n && !this.isLoaderActive) {
58
+ if (n && this.isCompMounted) {
58
59
  this.$nextTick(() => {
59
60
  // for expanding dropdown
60
61
  this.setDropdownMaxHeight("open");
61
62
  });
62
63
  }
63
64
 
64
- if (o && !this.isLoaderActive) {
65
+ if (o && this.isCompMounted) {
65
66
  this.$nextTick(() => {
66
67
  // for expanding dropdown
67
68
  this.setDropdownMaxHeight("close");
@@ -84,7 +85,7 @@ export default {
84
85
  this.$emit("dropDownItemChange");
85
86
 
86
87
  this.$nextTick(() => {
87
- const dropDownUl = this.$refs[this.title];
88
+ const dropDownUl = this.$refs["sectionItems"];
88
89
  if (dropDownUl)
89
90
  this.dropDownSectionHeight = `${dropDownUl.scrollHeight}px`;
90
91
  });
@@ -99,11 +100,9 @@ export default {
99
100
  methods: {
100
101
  setDropdownMaxHeight(mode) {
101
102
  if (mode === "open") {
102
- this.$refs[this.title][0].style.maxHeight = `${
103
- this.$refs[this.title][0].scrollHeight
104
- }px`;
103
+ this.dropDownSectionHeight = `${this.$refs["sectionItems"].scrollHeight}px`;
105
104
  } else {
106
- this.$refs[this.title][0].style.maxHeight = null;
105
+ this.dropDownSectionHeight = null;
107
106
  }
108
107
  },
109
108
  toggleDropDownStatus() {