Skip to content

Commit 015705d

Browse files
committed
feat(feedback-dialog): Enhance feedback dialog with configurable context fields and payload options
1 parent 498784c commit 015705d

3 files changed

Lines changed: 174 additions & 35 deletions

File tree

extension/src/ext.js

Lines changed: 53 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -707,14 +707,6 @@ export default function ext(_galaxy) {
707707
item.action === 'feedback' &&
708708
item.feedback?.enableComment !== false,
709709
},
710-
feedbackCollectFields: {
711-
ref: 'feedback.collectFields',
712-
label: 'Context fields (comma-separated)',
713-
type: 'string',
714-
defaultValue:
715-
'userName,appId,sheetId,urlPath,platform,timestamp',
716-
show: (item) => item.action === 'feedback',
717-
},
718710
feedbackDialogTitle: {
719711
ref: 'feedback.dialogStrings.title',
720712
label: 'Dialog title override (overrides global)',
@@ -723,6 +715,59 @@ export default function ext(_galaxy) {
723715
show: (item) => item.action === 'feedback',
724716
},
725717

718+
// -- Context field toggles (expandable) --
719+
feedbackContextFields: {
720+
component: 'expandable-items',
721+
label: 'Context Fields',
722+
show: (item) => item.action === 'feedback',
723+
items: {
724+
dialogFieldsSection: {
725+
type: 'items',
726+
label: 'Show in Dialog',
727+
items: {
728+
dfInfo: { component: 'text', label: 'Fields visible to the user in the feedback dialog.' },
729+
dfUserName: { ref: 'feedback.dialogFields.userName', label: 'User Name', type: 'boolean', component: 'switch', defaultValue: true, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
730+
dfPlatform: { ref: 'feedback.dialogFields.platform', label: 'Platform', type: 'boolean', component: 'switch', defaultValue: true, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
731+
dfAppId: { ref: 'feedback.dialogFields.appId', label: 'App ID', type: 'boolean', component: 'switch', defaultValue: true, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
732+
dfSheetId: { ref: 'feedback.dialogFields.sheetId', label: 'Sheet ID', type: 'boolean', component: 'switch', defaultValue: true, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
733+
dfUrlPath: { ref: 'feedback.dialogFields.urlPath', label: 'URL Path', type: 'boolean', component: 'switch', defaultValue: true, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
734+
dfTimestamp: { ref: 'feedback.dialogFields.timestamp', label: 'Timestamp', type: 'boolean', component: 'switch', defaultValue: true, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
735+
dfUserId: { ref: 'feedback.dialogFields.userId', label: 'User ID', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
736+
dfUserDir: { ref: 'feedback.dialogFields.userDirectory', label: 'User Directory', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
737+
dfSenseVer: { ref: 'feedback.dialogFields.senseVersion', label: 'Qlik Sense Version', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
738+
dfBrowser: { ref: 'feedback.dialogFields.browser', label: 'Browser', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
739+
dfTenantId: { ref: 'feedback.dialogFields.tenantId', label: 'Tenant ID', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
740+
dfStatus: { ref: 'feedback.dialogFields.status', label: 'Status', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
741+
dfPicture: { ref: 'feedback.dialogFields.picture', label: 'Picture', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
742+
dfZoneinfo: { ref: 'feedback.dialogFields.preferredZoneinfo', label: 'Preferred Zone Info', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
743+
dfRoles: { ref: 'feedback.dialogFields.roles', label: 'Roles', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
744+
},
745+
},
746+
payloadFieldsSection: {
747+
type: 'items',
748+
label: 'Include in Payload',
749+
items: {
750+
pfInfo: { component: 'text', label: 'Fields included in the webhook POST payload (may differ from dialog).' },
751+
pfUserName: { ref: 'feedback.payloadFields.userName', label: 'User Name', type: 'boolean', component: 'switch', defaultValue: true, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
752+
pfPlatform: { ref: 'feedback.payloadFields.platform', label: 'Platform', type: 'boolean', component: 'switch', defaultValue: true, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
753+
pfAppId: { ref: 'feedback.payloadFields.appId', label: 'App ID', type: 'boolean', component: 'switch', defaultValue: true, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
754+
pfSheetId: { ref: 'feedback.payloadFields.sheetId', label: 'Sheet ID', type: 'boolean', component: 'switch', defaultValue: true, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
755+
pfUrlPath: { ref: 'feedback.payloadFields.urlPath', label: 'URL Path', type: 'boolean', component: 'switch', defaultValue: true, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
756+
pfTimestamp: { ref: 'feedback.payloadFields.timestamp', label: 'Timestamp', type: 'boolean', component: 'switch', defaultValue: true, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
757+
pfUserId: { ref: 'feedback.payloadFields.userId', label: 'User ID', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
758+
pfUserDir: { ref: 'feedback.payloadFields.userDirectory', label: 'User Directory', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
759+
pfSenseVer: { ref: 'feedback.payloadFields.senseVersion', label: 'Qlik Sense Version', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
760+
pfBrowser: { ref: 'feedback.payloadFields.browser', label: 'Browser', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
761+
pfTenantId: { ref: 'feedback.payloadFields.tenantId', label: 'Tenant ID', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
762+
pfStatus: { ref: 'feedback.payloadFields.status', label: 'Status', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
763+
pfPicture: { ref: 'feedback.payloadFields.picture', label: 'Picture', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
764+
pfZoneinfo: { ref: 'feedback.payloadFields.preferredZoneinfo', label: 'Preferred Zone Info', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
765+
pfRoles: { ref: 'feedback.payloadFields.roles', label: 'Roles', type: 'boolean', component: 'switch', defaultValue: false, options: [{ value: true, label: 'On' }, { value: false, label: 'Off' }] },
766+
},
767+
},
768+
},
769+
},
770+
726771
// -- Per-item colors --
727772
itemColorsHeader: {
728773
component: 'text',

extension/src/object-properties.js

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,20 @@ export default {
104104
enableRating: true,
105105
enableComment: true,
106106
commentMaxLength: 500,
107-
collectFields: 'userName,appId,sheetId,urlPath,platform,timestamp',
107+
dialogFields: {
108+
userName: true, appId: true, sheetId: true,
109+
urlPath: true, platform: true, timestamp: true,
110+
userId: false, userDirectory: false, senseVersion: false,
111+
browser: false, tenantId: false, status: false,
112+
picture: false, preferredZoneinfo: false, roles: false,
113+
},
114+
payloadFields: {
115+
userName: true, appId: true, sheetId: true,
116+
urlPath: true, platform: true, timestamp: true,
117+
userId: false, userDirectory: false, senseVersion: false,
118+
browser: false, tenantId: false, status: false,
119+
picture: false, preferredZoneinfo: false, roles: false,
120+
},
108121
dialogStrings: { title: '' },
109122
},
110123
},
@@ -132,7 +145,20 @@ export default {
132145
enableRating: true,
133146
enableComment: true,
134147
commentMaxLength: 500,
135-
collectFields: 'userName,appId,sheetId,urlPath,platform,timestamp',
148+
dialogFields: {
149+
userName: true, appId: true, sheetId: true,
150+
urlPath: true, platform: true, timestamp: true,
151+
userId: false, userDirectory: false, senseVersion: false,
152+
browser: false, tenantId: false, status: false,
153+
picture: false, preferredZoneinfo: false, roles: false,
154+
},
155+
payloadFields: {
156+
userName: true, appId: true, sheetId: true,
157+
urlPath: true, platform: true, timestamp: true,
158+
userId: false, userDirectory: false, senseVersion: false,
159+
browser: false, tenantId: false, status: false,
160+
picture: false, preferredZoneinfo: false, roles: false,
161+
},
136162
dialogStrings: { title: '' },
137163
},
138164
},
@@ -160,7 +186,20 @@ export default {
160186
enableRating: true,
161187
enableComment: true,
162188
commentMaxLength: 500,
163-
collectFields: 'userName,appId,sheetId,urlPath,platform,timestamp',
189+
dialogFields: {
190+
userName: true, appId: true, sheetId: true,
191+
urlPath: true, platform: true, timestamp: true,
192+
userId: false, userDirectory: false, senseVersion: false,
193+
browser: false, tenantId: false, status: false,
194+
picture: false, preferredZoneinfo: false, roles: false,
195+
},
196+
payloadFields: {
197+
userName: true, appId: true, sheetId: true,
198+
urlPath: true, platform: true, timestamp: true,
199+
userId: false, userDirectory: false, senseVersion: false,
200+
browser: false, tenantId: false, status: false,
201+
picture: false, preferredZoneinfo: false, roles: false,
202+
},
164203
dialogStrings: { title: '' },
165204
},
166205
},
@@ -188,7 +227,20 @@ export default {
188227
enableRating: true,
189228
enableComment: true,
190229
commentMaxLength: 500,
191-
collectFields: 'userName,appId,sheetId,urlPath,platform,timestamp',
230+
dialogFields: {
231+
userName: true, appId: true, sheetId: true,
232+
urlPath: true, platform: true, timestamp: true,
233+
userId: false, userDirectory: false, senseVersion: false,
234+
browser: false, tenantId: false, status: false,
235+
picture: false, preferredZoneinfo: false, roles: false,
236+
},
237+
payloadFields: {
238+
userName: true, appId: true, sheetId: true,
239+
urlPath: true, platform: true, timestamp: true,
240+
userId: false, userDirectory: false, senseVersion: false,
241+
browser: false, tenantId: false, status: false,
242+
picture: false, preferredZoneinfo: false, roles: false,
243+
},
192244
dialogStrings: { title: '' },
193245
},
194246
},

0 commit comments

Comments
 (0)