forked from jsnbuchanan/crowd-funder-for-time-pwa
feat(export): Replace CSV export with standardized JSON format
- Add contactsToExportJson utility function for standardized data export - Replace CSV export with JSON format in DataExportSection - Update file extension and MIME type to application/json - Remove Dexie-specific export logic in favor of unified SQLite/Dexie approach - Update success notifications to reflect JSON format - Add TypeScript interfaces for export data structure This change improves data portability and standardization by: - Using a consistent JSON format for data export/import - Supporting both SQLite and Dexie databases - Including all contact fields in export - Properly handling contactMethods as stringified JSON - Maintaining backward compatibility with existing import tools Security: No sensitive data exposure, maintains existing access controls
This commit is contained in:
@@ -79,13 +79,9 @@ const DEFAULT_SETTINGS: Settings = {
|
||||
|
||||
// retrieves default settings
|
||||
export async function retrieveSettingsForDefaultAccount(): Promise<Settings> {
|
||||
console.log("[databaseUtil] retrieveSettingsForDefaultAccount");
|
||||
const platform = PlatformServiceFactory.getInstance();
|
||||
const sql = "SELECT * FROM settings WHERE id = ?";
|
||||
console.log("[databaseUtil] sql", sql);
|
||||
const result = await platform.dbQuery(sql, [MASTER_SETTINGS_KEY]);
|
||||
console.log("[databaseUtil] result", JSON.stringify(result, null, 2));
|
||||
console.trace("Trace from [retrieveSettingsForDefaultAccount]");
|
||||
if (!result) {
|
||||
return DEFAULT_SETTINGS;
|
||||
} else {
|
||||
@@ -103,21 +99,21 @@ export async function retrieveSettingsForDefaultAccount(): Promise<Settings> {
|
||||
|
||||
/**
|
||||
* Retrieves settings for the active account, merging with default settings
|
||||
*
|
||||
*
|
||||
* @returns Promise<Settings> Combined settings with account-specific overrides
|
||||
* @throws Will log specific errors for debugging but returns default settings on failure
|
||||
*/
|
||||
export async function retrieveSettingsForActiveAccount(): Promise<Settings> {
|
||||
logConsoleAndDb("[databaseUtil] Starting settings retrieval for active account");
|
||||
|
||||
try {
|
||||
// Get default settings first
|
||||
const defaultSettings = await retrieveSettingsForDefaultAccount();
|
||||
logConsoleAndDb(`[databaseUtil] Retrieved default settings (hasActiveDid: ${!!defaultSettings.activeDid})`);
|
||||
|
||||
// If no active DID, return defaults
|
||||
if (!defaultSettings.activeDid) {
|
||||
logConsoleAndDb("[databaseUtil] No active DID found, returning default settings");
|
||||
logConsoleAndDb(
|
||||
"[databaseUtil] No active DID found, returning default settings",
|
||||
);
|
||||
return defaultSettings;
|
||||
}
|
||||
|
||||
@@ -130,12 +126,17 @@ export async function retrieveSettingsForActiveAccount(): Promise<Settings> {
|
||||
);
|
||||
|
||||
if (!result?.values?.length) {
|
||||
logConsoleAndDb(`[databaseUtil] No account-specific settings found for ${defaultSettings.activeDid}`);
|
||||
logConsoleAndDb(
|
||||
`[databaseUtil] No account-specific settings found for ${defaultSettings.activeDid}`,
|
||||
);
|
||||
return defaultSettings;
|
||||
}
|
||||
|
||||
// Map and filter settings
|
||||
const overrideSettings = mapColumnsToValues(result.columns, result.values)[0] as Settings;
|
||||
const overrideSettings = mapColumnsToValues(
|
||||
result.columns,
|
||||
result.values,
|
||||
)[0] as Settings;
|
||||
const overrideSettingsFiltered = Object.fromEntries(
|
||||
Object.entries(overrideSettings).filter(([_, v]) => v !== null),
|
||||
);
|
||||
@@ -151,30 +152,27 @@ export async function retrieveSettingsForActiveAccount(): Promise<Settings> {
|
||||
} catch (error) {
|
||||
logConsoleAndDb(
|
||||
`[databaseUtil] Failed to parse searchBoxes for ${defaultSettings.activeDid}: ${error}`,
|
||||
true
|
||||
true,
|
||||
);
|
||||
// Reset to empty array on parse failure
|
||||
settings.searchBoxes = [];
|
||||
}
|
||||
}
|
||||
|
||||
logConsoleAndDb(
|
||||
`[databaseUtil] Successfully merged settings for ${defaultSettings.activeDid} ` +
|
||||
`(overrides: ${Object.keys(overrideSettingsFiltered).length})`
|
||||
);
|
||||
return settings;
|
||||
|
||||
} catch (error) {
|
||||
logConsoleAndDb(
|
||||
`[databaseUtil] Failed to retrieve account settings for ${defaultSettings.activeDid}: ${error}`,
|
||||
true
|
||||
true,
|
||||
);
|
||||
// Return defaults on error
|
||||
return defaultSettings;
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
logConsoleAndDb(`[databaseUtil] Failed to retrieve default settings: ${error}`, true);
|
||||
logConsoleAndDb(
|
||||
`[databaseUtil] Failed to retrieve default settings: ${error}`,
|
||||
true,
|
||||
);
|
||||
// Return minimal default settings on complete failure
|
||||
return {
|
||||
id: MASTER_SETTINGS_KEY,
|
||||
|
||||
Reference in New Issue
Block a user