Skip to content

Commit 5012d5d

Browse files
authored
feat(Delimiter): add delimiter for object inline (#181)
1 parent 5d4e7d2 commit 5012d5d

36 files changed

+232
-36
lines changed

docs/spec.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ type Spec = ArraySpec | BooleanSpec | NumberSpec | ObjectSpec | StringSpec;
9494
| viewSpec.oneOfParams | `object` | | [Parameters](#oneofparams) that must be passed to oneof input |
9595
| viewSpec.placeholder | `string` | | A short hint displayed in the field before the user enters the value |
9696
| viewSpec.hidden | `boolean` | | Hide field and view |
97+
| viewSpec.delimiter | `Record<string, string>` | | Values of delimiters of inline object input elements |
9798

9899
### StringSpec
99100

src/lib/core/types/specs.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ export interface ObjectSpec<
123123
hidden?: boolean;
124124
inputProps?: InputComponentProps;
125125
layoutProps?: LayoutComponentProps;
126+
delimiter?: Record<string, string>;
126127
};
127128
}
128129

src/lib/kit/components/Inputs/ObjectBase/ObjectBase.scss

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,11 @@
1616
}
1717
}
1818
}
19+
20+
&__delimiter {
21+
display: flex;
22+
margin-right: 8px;
23+
align-items: center;
24+
white-space: nowrap;
25+
}
1926
}

src/lib/kit/components/Inputs/ObjectBase/ObjectBase.tsx

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React from 'react';
22

33
import {Plus} from '@gravity-ui/icons';
4-
import {Button, Icon} from '@gravity-ui/uikit';
4+
import {Button, Icon, Text} from '@gravity-ui/uikit';
55
import isObjectLike from 'lodash/isObjectLike';
66
import set from 'lodash/set';
77

@@ -81,24 +81,32 @@ export const ObjectBase: React.FC<ObjectBaseProps> = ({
8181
? filterPropertiesForObjectInline(spec.properties)
8282
: spec.properties;
8383

84+
const delimiter = spec.viewSpec.delimiter;
85+
const orderProperties = spec.viewSpec.order || Object.keys(specProperties);
86+
8487
return (
8588
<div className={b('content', {inline})}>
86-
{(spec.viewSpec.order || Object.keys(specProperties)).map((property: string) =>
89+
{orderProperties.map((property: string) =>
8790
specProperties[property] ? (
88-
<Controller
89-
value={restProps.input.value?.[property]}
90-
spec={specProperties[property]}
91-
name={`${name ? name + '.' : ''}${property}`}
92-
parentOnChange={parentOnChange}
93-
parentOnUnmount={restProps.input.parentOnUnmount}
94-
key={`${name ? name + '.' : ''}${property}`}
95-
/>
91+
<React.Fragment key={`${name ? name + '.' : ''}${property}`}>
92+
<Controller
93+
value={restProps.input.value?.[property]}
94+
spec={specProperties[property]}
95+
name={`${name ? name + '.' : ''}${property}`}
96+
parentOnChange={parentOnChange}
97+
parentOnUnmount={restProps.input.parentOnUnmount}
98+
/>
99+
{delimiter && delimiter[property] ? (
100+
<Text className={b('delimiter')}>{delimiter[property]}</Text>
101+
) : null}
102+
</React.Fragment>
96103
) : null,
97104
)}
98105
</div>
99106
);
100107
}, [
101108
spec.properties,
109+
spec.viewSpec.delimiter,
102110
spec.viewSpec.order,
103111
restProps.input.value,
104112
restProps.input.parentOnUnmount,
Loading
Loading
Loading
Loading
Loading
Loading

0 commit comments

Comments
 (0)