/
ui_menu_types.go
112 lines (92 loc) · 3.08 KB
/
ui_menu_types.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*
Copyright AppsCode Inc. and Contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package v1alpha1
import (
kmapi "kmodules.xyz/client-go/api/v1"
"kmodules.xyz/resource-metadata/apis/shared"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
helmshared "x-helm.dev/apimachinery/apis/shared"
)
const (
ResourceKindMenu = "Menu"
ResourceMenu = "menu"
ResourceMenus = "menus"
)
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +kubebuilder:object:root=true
// +kubebuilder:resource:path=menus,singular=menu,scope=Cluster
type Menu struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec MenuSpec `json:"spec,omitempty"`
}
type MenuSpec struct {
Mode MenuMode `json:"mode"`
// +optional
Home *MenuSectionInfo `json:"home,omitempty"`
// +optional
Sections []*MenuSection `json:"sections,omitempty"`
}
type MenuSection struct {
MenuSectionInfo `json:",inline,omitempty"`
Items []MenuItem `json:"items"`
}
// +kubebuilder:validation:Enum=ALPHA;BETA;GA
type FeatureMode string
const (
FeatureModeAlpha FeatureMode = "ALPHA"
FeatureModeBeta FeatureMode = "BETA"
FeatureModeGA FeatureMode = "GA"
)
type MenuSectionInfo struct {
Name string `json:"name,omitempty"`
// +optional
Path string `json:"path,omitempty"`
// +optional
APIGroup string `json:"apiGroup,omitempty"`
// +optional
LayoutName string `json:"layoutName,omitempty"`
// Icons is an optional list of icons for an application. Icon information includes the source, size,
// and mime type.
Icons []helmshared.ImageSpec `json:"icons,omitempty"`
}
type MenuItem struct {
Name string `json:"name"`
// +optional
Path string `json:"path,omitempty"`
Resource *kmapi.ResourceID `json:"resource,omitempty"`
Missing bool `json:"missing,omitempty"`
// +optional
Required bool `json:"required,omitempty"`
// +optional
LayoutName string `json:"layoutName,omitempty"`
// +optional
FeatureMode FeatureMode `json:"featureMode,omitempty"`
// +optional
Icons []helmshared.ImageSpec `json:"icons,omitempty"`
Installer *shared.DeploymentParameters `json:"installer,omitempty"`
// +optional
Variant string `json:"variant,omitempty"`
// +optional
AvailableVariants int `json:"availableVariants,omitempty"`
// +optional
Items []MenuItem `json:"items,omitempty"`
}
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +kubebuilder:object:root=true
type MenuList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []Menu `json:"items,omitempty"`
}