Skip to content
Snippets Groups Projects
Commit 3aa75ba1 authored by Lewis Liu's avatar Lewis Liu
Browse files

Added field table multi updates

parent 5b1bc5a3
No related branches found
No related tags found
No related merge requests found
......@@ -331,10 +331,13 @@ export const fetchMetricRevisions = createThunkAction(FETCH_METRIC_REVISIONS, (m
const FETCH_LIST_FIELDS = "metabase/metadata/FETCH_LIST_FIELDS";
export const fetchListFields = createThunkAction(FETCH_LIST_FIELDS, (listId, reload = false) => {
return async (dispatch, getState) => {
const test = await dispatch(fetchLists());
await dispatch(fetchLists());
const list = i.getIn(getState(), ['metadata', 'lists', listId]);
const tableId = list.table_id;
await dispatch(fetchTableMetadata(tableId));
const table = i.getIn(getState(), ['metadata', 'tables', tableId]);
const databaseId = table.db_id;
await dispatch(fetchDatabaseMetadata(databaseId));
};
});
......
......@@ -19,13 +19,12 @@ import pure from "recompose/pure";
const Field = ({
field,
foreignKeys,
specialTypeId,
url,
icon,
isEditing,
formField
}) =>
<div className={cx(S.item)}>
}) => {
return <div className={cx(S.item)}>
<div className={S.leftIcons}>
</div>
<div className={S.itemBody}>
......@@ -85,7 +84,7 @@ const Field = ({
(field.special_type === 'fk' && formField.special_type.value === undefined)) &&
<Select
placeholder="Select a field type"
value={foreignKeys[field.fk_target_field_id]}
value={foreignKeys[field.fk_target_field_id] || {}}
options={Object.values(foreignKeys)}
updateImmediately={true}
onChange={(foreignKey) => formField.fk_target_field_id.onChange(foreignKey.id)}
......@@ -93,7 +92,7 @@ const Field = ({
/> :
field.special_type === 'fk' &&
<span>
{foreignKeys[field.fk_target_field_id].name}
{i.getIn(foreignKeys, [field.fk_target_field_id, "name"])}
</span>
}
</div>
......@@ -102,7 +101,7 @@ const Field = ({
</div>
</div>
</div>
}
Field.propTypes = {
field: PropTypes.object.isRequired,
url: PropTypes.string.isRequired,
......
......@@ -58,7 +58,6 @@ const mapDispatchToProps = {
};
const validate = (values, props) => {
console.log(values);
return {};
}
......@@ -90,6 +89,7 @@ export default class ReferenceEntityList extends Component {
isEditing,
startEditing,
endEditing,
updateField,
handleSubmit,
submitting
} = this.props;
......@@ -104,10 +104,24 @@ export default class ReferenceEntityList extends Component {
<form
onSubmit={handleSubmit(async formFields => {
const updatedFields = Object.keys(formFields)
.filter(fieldId => Object.values(formFields[fieldId])
.some(value => value !== undefined))
.map(fieldId => ({...fields[fieldId], ...formFields[fieldId]}))
console.log(updatedFields);
.map(fieldId => ({
field: entities[fieldId],
formField: Object.keys(formFields[fieldId])
.filter(key => formFields[fieldId][key] !== undefined)
.reduce((map, key) => i
.assoc(map, key, formFields[fieldId][key]), {}
)
}))
.filter(({field, formField}) => Object
.keys(formField).length !== 0
)
.map(({field, formField}) => ({...field, ...formField}));
// Using Promise.all here makes values not update immediately
await updatedFields
.reduce((promise, field) => promise
.then(() => updateField(field)),
Promise.resolve()
);
endEditing();
})}
>
......
......@@ -326,11 +326,11 @@ const getTableQuestions = createSelector(
const getDatabaseByList = createSelector(
[getList, getTables, getDatabases],
(list, tables, databases) => list && list.table_id ?
databases[tables[list.table_id].db_id] : {}
(list, tables, databases) => list && list.table_id && tables[list.table_id] &&
databases[tables[list.table_id].db_id] || {}
);
const databaseToForeignKeys = (database) => database && database.tables_lookup &&
const databaseToForeignKeys = (database) => database && database.tables_lookup ?
Object.values(database.tables_lookup)
// ignore tables without primary key
.filter(table => table && table.fields_lookup &&
......@@ -349,7 +349,8 @@ const databaseToForeignKeys = (database) => database && database.tables_lookup &
`${table.display_name}${field.display_name}`,
description: field.description
}))
.reduce((map, foreignKey) => i.assoc(map, foreignKey.id, foreignKey), {});
.reduce((map, foreignKey) => i.assoc(map, foreignKey.id, foreignKey), {}) :
{};
const getForeignKeysByList = createSelector(
[getDatabaseByList],
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment