Merge pull request #1519 from rowyio/rc

Rc
This commit is contained in:
Shams
2024-01-02 04:07:37 -08:00
committed by GitHub
8 changed files with 50 additions and 27 deletions

View File

@@ -486,7 +486,11 @@ export const updateFieldAtom = atom(
row._rowy_ref.path,
omitRowyFields(newRowValues),
deleteField ? [fieldName] : [],
arrayTableData
{
...arrayTableData,
// using set if we are updating a nested field
useSet: fieldName.split(".").length > 1,
}
);
}
}
@@ -496,7 +500,11 @@ export const updateFieldAtom = atom(
row._rowy_ref.path,
omitRowyFields(dbUpdate),
deleteField ? [fieldName] : [],
arrayTableData
{
...arrayTableData,
// using set if we are updating a nested field
useSet: fieldName.split(".").length > 1,
}
);
}

View File

@@ -142,7 +142,7 @@ export default function ImportCsvWizard({ onClose }: ITableModalProps) {
let requiredUploads: any = {};
columns.forEach((column, index) => {
if (needsConverter(column.type)) {
requiredConverts[index] = getConverter(column.type);
requiredConverts[column.columnKey] = getConverter(column.type);
// console.log({ needsUploadTypes }, column.type);
if (needsUploadTypes(column.type)) {
requiredUploads[column.fieldName + ""] = true;
@@ -215,8 +215,8 @@ export default function ImportCsvWizard({ onClose }: ITableModalProps) {
const newValidRows = validRows.map((row) => {
// Convert required values
Object.keys(row).forEach((key, i) => {
if (requiredConverts[i]) {
row[key] = requiredConverts[i](row[key]);
if (requiredConverts[key]) {
row[key] = requiredConverts[key](row[key]);
}
});

View File

@@ -12,7 +12,7 @@ export interface ITableNameProps extends IShortTextComponentProps {
export default function TableName({ watchedField, ...props }: ITableNameProps) {
const {
field: { onChange, value },
field: { onChange },
useFormMethods: { control },
disabled,
} = props;
@@ -25,12 +25,9 @@ export default function TableName({ watchedField, ...props }: ITableNameProps) {
if (!touched && typeof watchedValue === "string" && !!watchedValue) {
// if table name field is not touched, and watched value is valid, set table name to watched value
onChange(startCase(watchedValue));
} else if (typeof value === "string") {
// otherwise if table name is valid, set watched value to table name
onChange(startCase(value.trim()));
}
}
}, [watchedValue, disabled, onChange, value]);
}, [watchedValue, disabled]);
return <ShortTextComponent {...props} />;
}

View File

@@ -213,7 +213,7 @@ export const tableSettings = (
name: "name",
label: "Table name",
required: true,
watchedField: "name",
watchedField: "collection",
assistiveText: "User-facing name for this table",
autoFocus: true,
gridCols: { xs: 12, sm: 6 },

View File

@@ -165,6 +165,7 @@ export default function FilterInputs({
column: selectedColumn,
_rowy_ref: {},
value: query.value,
onSubmit: () => {},
onChange: (value: any) => {
const newQuery = {
...query,

View File

@@ -6,8 +6,8 @@ import { getFieldId } from "@src/components/SideDrawer/utils";
export default function Number_({
column,
value,
onChange,
onSubmit,
onChange = () => {},
onSubmit = () => {},
disabled,
}: ISideDrawerFieldProps<number | string>) {
return (

View File

@@ -264,22 +264,37 @@ export function useFirestoreCollectionWithAtom<
// set the atoms value to a function that updates a doc in the collection
if (updateDocAtom) {
setUpdateDocAtom(
() => async (path: string, update: T, deleteFields?: string[]) => {
const updateToDb = { ...update };
() =>
async (
path: string,
update: T,
deleteFields?: string[],
options?: {
useSet?: boolean;
}
) => {
const updateToDb = { ...update };
if (Array.isArray(deleteFields)) {
for (const field of deleteFields) {
set(updateToDb as any, field, deleteField());
if (Array.isArray(deleteFields)) {
for (const field of deleteFields) {
set(updateToDb as any, field, deleteField());
}
}
if (options?.useSet) {
return await setDoc(doc(firebaseDb, path), updateToDb, {
merge: true,
});
}
try {
return await updateDoc(doc(firebaseDb, path), updateToDb);
} catch (e) {
return await setDoc(doc(firebaseDb, path), updateToDb, {
merge: true,
});
}
}
try {
return await updateDoc(doc(firebaseDb, path), updateToDb);
} catch (e) {
return await setDoc(doc(firebaseDb, path), updateToDb, {
merge: true,
});
}
}
);
}
@@ -443,6 +458,7 @@ export const tableFiltersToFirestoreFilters = (filters: TableFilter[]) => {
continue;
} else if (filter.operator === "is-not-empty") {
firestoreFilters.push(where(filter.key, "!=", ""));
continue;
} else if (filter.operator === "array-contains") {
if (!filter.value || !filter.value.length) continue;
// make the value as a singular string

View File

@@ -26,13 +26,14 @@ export type UpdateDocFunction<T = TableRow> = (
* @param path - The full path to the doc
* @param update - The updates to be deeply merged with the existing doc. Note arrays should be ovewritten to match Firestore set with merge behavior
* @param deleteFields - Optionally, fields to be deleted from the doc. Access nested fields with dot notation
* @param options - Optionally, filed to pass extra data to the function
* @returns Promise
*/
export type UpdateCollectionDocFunction<T = TableRow> = (
path: string,
update: Partial<T>,
deleteFields?: string[],
options?: ArrayTableRowData
options?: ArrayTableRowData & { useSet?: boolean }
) => Promise<void>;
/**