1+ /**
2+ * Auto-save draft feature for Catalog Client Script
3+ *
4+ * This script automatically saves form data as a draft in the browser's sessionStorage
5+ * every minute if changes are detected. It also provides functionality to restore
6+ * the last saved draft when the form is loaded.
7+ */
8+
9+ // Executes when the form loads
10+ function onLoad ( ) {
11+ var autosaveInterval = 60000 ; // 1 minute
12+
13+ // Try to restore previous draft
14+ restoreLastDraft ( ) ;
15+
16+ // Set up auto-save interval
17+ setInterval ( function ( ) {
18+ if ( g_form . isModified ( ) ) {
19+ saveDraft ( ) ;
20+ }
21+ } , autosaveInterval ) ;
22+ }
23+
24+ // Saves the current form state as a draft
25+ function saveDraft ( ) {
26+ try {
27+ var draftData = { } ;
28+ g_form . serialize ( draftData ) ;
29+
30+ var draftKey = 'catalogDraft_' + g_form . getUniqueValue ( ) ;
31+ sessionStorage . setItem ( draftKey , JSON . stringify ( {
32+ timestamp : new Date ( ) . getTime ( ) ,
33+ data : draftData
34+ } ) ) ;
35+
36+ g_form . addInfoMessage ( 'Draft saved automatically' ) ;
37+ } catch ( e ) {
38+ console . error ( 'Error saving draft: ' + e ) ;
39+ }
40+ }
41+
42+ // Restores the last saved draft if available
43+ function restoreLastDraft ( ) {
44+ try {
45+ var draftKey = 'catalogDraft_' + g_form . getUniqueValue ( ) ;
46+ var savedDraft = sessionStorage . getItem ( draftKey ) ;
47+
48+ if ( savedDraft ) {
49+ var draftData = JSON . parse ( savedDraft ) ;
50+ var timestamp = new Date ( draftData . timestamp ) ;
51+
52+ // Ask user if they want to restore the draft
53+ if ( confirm ( 'A draft from ' + timestamp . toLocaleString ( ) + ' was found. Would you like to restore it?' ) ) {
54+ Object . keys ( draftData . data ) . forEach ( function ( field ) {
55+ g_form . setValue ( field , draftData . data [ field ] ) ;
56+ } ) ;
57+ g_form . addInfoMessage ( 'Draft restored from ' + timestamp . toLocaleString ( ) ) ;
58+ } else {
59+ // Clear the draft if user chooses not to restore
60+ sessionStorage . removeItem ( draftKey ) ;
61+ }
62+ }
63+ } catch ( e ) {
64+ console . error ( 'Error restoring draft: ' + e ) ;
65+ }
66+ }
0 commit comments