1 export type ViewElementBase = {
8 "description"?: string;
11 "status"?: "current" | "deprecated" | "obsolete",
12 "reference"?: string, // https://tools.ietf.org/html/rfc7950#section-7.21.4
15 // https://tools.ietf.org/html/rfc7950#section-9.8
16 export type ViewElementBinary = ViewElementBase & {
18 "length"?: number; // number of octets
21 // https://tools.ietf.org/html/rfc7950#section-9.7.4
22 export type ViewElementBits = ViewElementBase & {
25 [name: string]: number | undefined; // 0 - 4294967295
29 // https://tools.ietf.org/html/rfc7950#section-9
30 export type ViewElementString = ViewElementBase & {
37 // https://tools.ietf.org/html/rfc7950#section-9.3
38 export type ViewElementNumber = ViewElementBase & {
47 // https://tools.ietf.org/html/rfc7950#section-9.5
48 export type ViewElementBoolean = ViewElementBase & {
51 "falseValue"?: string;
54 // https://tools.ietf.org/html/rfc7950#section-9.6.4
55 export type ViewElementSelection = ViewElementBase & {
56 "uiType": "selection";
57 "multiSelect"?: boolean
61 "description"?: string,
62 "status"?: "current" | "deprecated" | "obsolete",
67 // is a list if isList is true ;-)
68 export type ViewElementObject = ViewElementBase & {
74 // Hint: read only lists do not need a key
75 export type ViewElementList = (ViewElementBase & {
82 export type ViewElementReference = ViewElementBase & {
83 "uiType": "reference";
84 "referencePath": string;
85 "ref": (currentPath: string) => ViewElement | null;
88 export type ViewElement =
96 | ViewElementSelection
97 | ViewElementReference;
99 export const isViewElementString = (viewElement: ViewElement): viewElement is ViewElementString => {
100 return viewElement && viewElement.uiType === "string";
103 export const isViewElementNumber = (viewElement: ViewElement): viewElement is ViewElementNumber => {
104 return viewElement && viewElement.uiType === "number" ;
107 export const isViewElementBoolean = (viewElement: ViewElement): viewElement is ViewElementBoolean => {
108 return viewElement && viewElement.uiType === "boolean";
111 export const isViewElementObject = (viewElement: ViewElement): viewElement is ViewElementObject => {
112 return viewElement && viewElement.uiType === "object" && viewElement.isList === false;
115 export const isViewElementList = (viewElement: ViewElement): viewElement is ViewElementList => {
116 return viewElement && viewElement.uiType === "object" && viewElement.isList === true;
119 export const isViewElementObjectOrList = (viewElement: ViewElement): viewElement is ViewElementObject | ViewElementList => {
120 return viewElement && viewElement.uiType === "object";
123 export const isViewElementSelection = (viewElement: ViewElement): viewElement is ViewElementSelection => {
124 return viewElement && viewElement.uiType === "selection";
127 export const isViewElementReference = (viewElement: ViewElement): viewElement is ViewElementReference => {
128 return viewElement && viewElement.uiType === "reference";
131 export type ViewSpecification = {
135 "parentView"?: string;
137 "ifFeature"?: string;
140 "elements": { [name: string]: ViewElement };
141 readonly "canEdit": boolean;