Skip to content

Commit 23e3dee

Browse files
authored
Merge pull request #170 from performant-software/feature/udf3_search_filter
UDF #3 - Search/sort
2 parents 0402b75 + 3bb7bd3 commit 23e3dee

File tree

15 files changed

+103
-32
lines changed

15 files changed

+103
-32
lines changed

packages/controlled-vocabulary/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@performant-software/controlled-vocabulary",
3-
"version": "0.6.2-beta.5",
3+
"version": "1.0.0",
44
"description": "A package of components to allow user to configure dropdown elements. Use with the \"controlled_vocabulary\" gem.",
55
"license": "MIT",
66
"main": "./build/index.js",
@@ -12,8 +12,8 @@
1212
"build": "webpack --mode production && flow-copy-source -v src types"
1313
},
1414
"dependencies": {
15-
"@performant-software/semantic-components": "^0.6.2-beta.5",
16-
"@performant-software/shared-components": "^0.6.2-beta.5",
15+
"@performant-software/semantic-components": "^1.0.0",
16+
"@performant-software/shared-components": "^1.0.0",
1717
"i18next": "^21.9.2",
1818
"semantic-ui-react": "^2.1.2",
1919
"underscore": "^1.13.2"

packages/semantic-ui/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@performant-software/semantic-components",
3-
"version": "0.6.2-beta.5",
3+
"version": "1.0.0",
44
"description": "A package of shared components based on the Semantic UI Framework.",
55
"license": "MIT",
66
"main": "./build/index.js",
@@ -12,7 +12,7 @@
1212
"build": "webpack --mode production && flow-copy-source -v src types"
1313
},
1414
"dependencies": {
15-
"@performant-software/shared-components": "^0.6.2-beta.5",
15+
"@performant-software/shared-components": "^1.0.0",
1616
"@react-google-maps/api": "^2.8.1",
1717
"axios": "^0.26.1",
1818
"i18next": "^19.4.4",

packages/shared/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@performant-software/shared-components",
3-
"version": "0.6.2-beta.5",
3+
"version": "1.0.0",
44
"description": "A package of shared, framework agnostic, components.",
55
"license": "MIT",
66
"main": "./build/index.js",
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#UserDefinedFields
2+
This package is designed to be used with the [user_defined_fields](https://github.com/performant-software/user-defined-fields) Rails gem. The idea is to allow users to define what type of metadata they want to collection about specific models and use these components to add, remove, and modify the configuration of the fields.
3+
4+
## Installation
5+
6+
```bash
7+
yarn add @performant-software/user-defined-fields
8+
```
9+
10+
or
11+
12+
```bash
13+
npm install @performant-software/user-defined-fields
14+
```
15+
16+
## Components
17+
To load user defined fields directly from the API endpoint, use the `UserDefinedFieldsList` component.
18+
19+
```jsx
20+
<UserDefinedFieldsList />
21+
```
22+
23+
To add the user defined fields from nested attributes of a parent record, use the `UserDefinedFieldsEmbeddedList` component.
24+
25+
```jsx
26+
<UserDefinedFieldsEmbeddedList
27+
items={props.item.user_defined_fields}
28+
onDelete={props.onDeleteChildAssociation.bind(this, 'user_defined_fields')}
29+
onSave={props.onSaveChildAssociation.bind(this, 'user_defined_fields')}
30+
/>
31+
```
32+
33+
## Services
34+
35+
```javascript
36+
// Fetch the list of user defined fields
37+
UserDefinedFieldsService.fetchAll(params)
38+
39+
// Fetch a single user defined field
40+
UserDefinedFieldsService.fetchOne(id)
41+
42+
// Save a user defined field
43+
UserDefinedFieldsService.save(udf)
44+
45+
// Delete a user defined field
46+
UserDefinedFieldsService.delete(udf)
47+
48+
// Fetch a list of tables to which user defined fields can be added
49+
UserDefinedFieldsService.fetchTables()
50+
51+
// Fetch a list of allowed data types
52+
UserDefinedFieldsService.fetchDataTypes()
53+
```

packages/user-defined-fields/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@performant-software/user-defined-fields",
3-
"version": "0.6.2-beta.5",
3+
"version": "1.0.0",
44
"description": "A package of components used for allowing end users to define fields on models. Use with the \"user_defined_fields\" gem.",
55
"license": "MIT",
66
"main": "./build/index.js",
@@ -9,8 +9,8 @@
99
"build": "webpack --mode production && flow-copy-source -v src types"
1010
},
1111
"dependencies": {
12-
"@performant-software/semantic-components": "^0.6.2-beta.5",
13-
"@performant-software/shared-components": "^0.6.2-beta.5",
12+
"@performant-software/semantic-components": "^1.0.0",
13+
"@performant-software/shared-components": "^1.0.0",
1414
"i18next": "^21.9.1",
1515
"semantic-ui-react": "^2.1.2",
1616
"underscore": "^1.13.2"

packages/user-defined-fields/src/components/UserDefinedFieldModal.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,12 @@ const UserDefinedFieldModal: ComponentType<any> = (props) => {
9090
label={i18n.t('UserDefinedFieldModal.labels.required')}
9191
onChange={props.onCheckboxInputChange.bind(this, 'required')}
9292
/>
93+
<Form.Checkbox
94+
error={props.isError('searchable')}
95+
checked={props.item.searchable}
96+
label={i18n.t('UserDefinedFieldModal.labels.searchable')}
97+
onChange={props.onCheckboxInputChange.bind(this, 'searchable')}
98+
/>
9399
{ props.item.data_type === DataTypes.select && (
94100
<Form.Checkbox
95101
error={props.isError('allow_multiple')}

packages/user-defined-fields/src/components/UserDefinedFieldsForm.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ const UserDefinedFieldsForm: ComponentType<any> = (props: Props) => {
134134
required={field.required}
135135
>
136136
<DatePicker
137-
onChange={(date) => onChange(field, date && date.toString())}
137+
onChange={(date) => onChange(field, date && date.toISOString())}
138138
value={fieldValue && new Date(fieldValue)}
139139
/>
140140
</Form.Input>

packages/user-defined-fields/src/i18n/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"dataType": "Data type",
66
"name": "Name",
77
"required": "Required",
8+
"searchable": "Searchable",
89
"table": "Table"
910
},
1011
"title": {

packages/user-defined-fields/src/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export { default as UserDefinedFieldsList } from './components/UserDefinedFields
1111
export { default as UserDefinedFieldsService } from './services/UserDefinedFields';
1212

1313
// Transforms
14+
export { default as FieldableTransform } from './transforms/Fieldable';
1415
export { default as UserDefinedFieldTransform } from './transforms/UserDefinedField';
1516
export { default as UserDefinedFieldsTransform } from './transforms/UserDefinedFields';
1617

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// @flow
2+
3+
import { Form as FormUtils } from '@performant-software/shared-components';
4+
import _ from 'underscore';
5+
6+
/**
7+
* Class responsible for transforming fieldable data.
8+
*/
9+
class Fieldable {
10+
/**
11+
* Converts the "user_defined" data for the passed fieldable item into form data.
12+
*
13+
* @param formData
14+
* @param prefix
15+
* @param item
16+
*/
17+
toFormData(formData, prefix, item) {
18+
const { user_defined: userDefined } = item;
19+
20+
_.each(_.keys(userDefined), (key) => {
21+
FormUtils.setAttribute(formData, `${prefix}[user_defined]`, userDefined, key);
22+
});
23+
}
24+
}
25+
26+
const FieldableTransform: Fieldable = new Fieldable();
27+
export default FieldableTransform;

0 commit comments

Comments
 (0)