fix: checkbox and toggle settings not persisting after page refresh
PostgreSQL's json column type returns parsed values directly (boolean false instead of string "false"). The backend code used a truthy check which failed for boolean false values, causing null to be returned instead of the actual false value. Changed condition from `if (setting.setting_value)` to explicit null check `if (setting.setting_value !== null && setting.setting_value !== undefined)` and added handling for already-parsed json column values. Fixes #117
This commit is contained in:
@@ -102,13 +102,20 @@ router.get('/', adminAuth, requirePermission('settings.view'), async (req, res)
|
|||||||
// Convert to object format
|
// Convert to object format
|
||||||
const settingsObject = {};
|
const settingsObject = {};
|
||||||
settings.forEach(setting => {
|
settings.forEach(setting => {
|
||||||
if (setting.setting_value) {
|
// Check for null/undefined explicitly to handle boolean false and 0 values
|
||||||
try {
|
// PostgreSQL json column returns parsed values (false as boolean, not string)
|
||||||
// Try to parse as JSON first
|
if (setting.setting_value !== null && setting.setting_value !== undefined) {
|
||||||
settingsObject[setting.setting_key] = JSON.parse(setting.setting_value);
|
// If the value is already parsed (from json column), use it directly
|
||||||
} catch (e) {
|
if (typeof setting.setting_value !== 'string') {
|
||||||
// If it's not valid JSON, use the raw value
|
|
||||||
settingsObject[setting.setting_key] = setting.setting_value;
|
settingsObject[setting.setting_key] = setting.setting_value;
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
// Try to parse as JSON first
|
||||||
|
settingsObject[setting.setting_key] = JSON.parse(setting.setting_value);
|
||||||
|
} catch (e) {
|
||||||
|
// If it's not valid JSON, use the raw value
|
||||||
|
settingsObject[setting.setting_key] = setting.setting_value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
settingsObject[setting.setting_key] = null;
|
settingsObject[setting.setting_key] = null;
|
||||||
@@ -129,17 +136,24 @@ router.get('/:type', adminAuth, requirePermission('settings.view'), async (req,
|
|||||||
const settings = await db('app_settings')
|
const settings = await db('app_settings')
|
||||||
.where('setting_type', type)
|
.where('setting_type', type)
|
||||||
.select('*');
|
.select('*');
|
||||||
|
|
||||||
// Convert to object format
|
// Convert to object format
|
||||||
const settingsObject = {};
|
const settingsObject = {};
|
||||||
settings.forEach(setting => {
|
settings.forEach(setting => {
|
||||||
if (setting.setting_value) {
|
// Check for null/undefined explicitly to handle boolean false and 0 values
|
||||||
try {
|
// PostgreSQL json column returns parsed values (false as boolean, not string)
|
||||||
// Try to parse as JSON first
|
if (setting.setting_value !== null && setting.setting_value !== undefined) {
|
||||||
settingsObject[setting.setting_key] = JSON.parse(setting.setting_value);
|
// If the value is already parsed (from json column), use it directly
|
||||||
} catch (e) {
|
if (typeof setting.setting_value !== 'string') {
|
||||||
// If it's not valid JSON, use the raw value
|
|
||||||
settingsObject[setting.setting_key] = setting.setting_value;
|
settingsObject[setting.setting_key] = setting.setting_value;
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
// Try to parse as JSON first
|
||||||
|
settingsObject[setting.setting_key] = JSON.parse(setting.setting_value);
|
||||||
|
} catch (e) {
|
||||||
|
// If it's not valid JSON, use the raw value
|
||||||
|
settingsObject[setting.setting_key] = setting.setting_value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
settingsObject[setting.setting_key] = null;
|
settingsObject[setting.setting_key] = null;
|
||||||
|
|||||||
Reference in New Issue
Block a user