hazo_collab_forms 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +114 -0
- package/dist/components/collab_form_file_upload.d.ts +65 -0
- package/dist/components/collab_form_file_upload.d.ts.map +1 -0
- package/dist/components/collab_form_file_upload.js +339 -0
- package/dist/components/collab_form_file_upload.js.map +1 -0
- package/dist/components/data_ok_checkbox.d.ts +36 -0
- package/dist/components/data_ok_checkbox.d.ts.map +1 -0
- package/dist/components/data_ok_checkbox.js +26 -0
- package/dist/components/data_ok_checkbox.js.map +1 -0
- package/dist/components/hazo_collab_form_base.d.ts +398 -0
- package/dist/components/hazo_collab_form_base.d.ts.map +1 -0
- package/dist/components/hazo_collab_form_base.js +206 -0
- package/dist/components/hazo_collab_form_base.js.map +1 -0
- package/dist/components/hazo_collab_form_checkbox.d.ts +52 -0
- package/dist/components/hazo_collab_form_checkbox.d.ts.map +1 -0
- package/dist/components/hazo_collab_form_checkbox.js +65 -0
- package/dist/components/hazo_collab_form_checkbox.js.map +1 -0
- package/dist/components/hazo_collab_form_combo.d.ts +91 -0
- package/dist/components/hazo_collab_form_combo.d.ts.map +1 -0
- package/dist/components/hazo_collab_form_combo.js +192 -0
- package/dist/components/hazo_collab_form_combo.js.map +1 -0
- package/dist/components/hazo_collab_form_date.d.ts +71 -0
- package/dist/components/hazo_collab_form_date.d.ts.map +1 -0
- package/dist/components/hazo_collab_form_date.js +251 -0
- package/dist/components/hazo_collab_form_date.js.map +1 -0
- package/dist/components/hazo_collab_form_group.d.ts +40 -0
- package/dist/components/hazo_collab_form_group.d.ts.map +1 -0
- package/dist/components/hazo_collab_form_group.js +151 -0
- package/dist/components/hazo_collab_form_group.js.map +1 -0
- package/dist/components/hazo_collab_form_inputbox.d.ts +44 -0
- package/dist/components/hazo_collab_form_inputbox.d.ts.map +1 -0
- package/dist/components/hazo_collab_form_inputbox.js +64 -0
- package/dist/components/hazo_collab_form_inputbox.js.map +1 -0
- package/dist/components/hazo_collab_form_radio.d.ts +73 -0
- package/dist/components/hazo_collab_form_radio.d.ts.map +1 -0
- package/dist/components/hazo_collab_form_radio.js +65 -0
- package/dist/components/hazo_collab_form_radio.js.map +1 -0
- package/dist/components/hazo_collab_form_set.d.ts +181 -0
- package/dist/components/hazo_collab_form_set.d.ts.map +1 -0
- package/dist/components/hazo_collab_form_set.js +425 -0
- package/dist/components/hazo_collab_form_set.js.map +1 -0
- package/dist/components/hazo_collab_form_textarea.d.ts +43 -0
- package/dist/components/hazo_collab_form_textarea.d.ts.map +1 -0
- package/dist/components/hazo_collab_form_textarea.js +61 -0
- package/dist/components/hazo_collab_form_textarea.js.map +1 -0
- package/dist/components/index.d.ts +23 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +14 -0
- package/dist/components/index.js.map +1 -0
- package/dist/index.client.d.ts +7 -0
- package/dist/index.client.d.ts.map +1 -0
- package/dist/index.client.js +7 -0
- package/dist/index.client.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +15 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +62 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/index.d.ts +5 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +5 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/utils/cn.d.ts +12 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/cn.js +15 -0
- package/dist/utils/cn.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/use_chat_messages_check.d.ts +40 -0
- package/dist/utils/use_chat_messages_check.d.ts.map +1 -0
- package/dist/utils/use_chat_messages_check.js +80 -0
- package/dist/utils/use_chat_messages_check.js.map +1 -0
- package/dist/utils/use_collab_chat.d.ts +21 -0
- package/dist/utils/use_collab_chat.d.ts.map +1 -0
- package/dist/utils/use_collab_chat.js +49 -0
- package/dist/utils/use_collab_chat.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.client.js","sourceRoot":"","sources":["../src/index.client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main entry point for hazo_collab_forms package
|
|
3
|
+
* Exports all public APIs of the collaboration forms package
|
|
4
|
+
*/
|
|
5
|
+
export * from './lib/index.js';
|
|
6
|
+
export * from './components/index.js';
|
|
7
|
+
export * from './utils/index.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main entry point for hazo_collab_forms package
|
|
3
|
+
* Exports all public APIs of the collaboration forms package
|
|
4
|
+
*/
|
|
5
|
+
export * from './lib/index.js';
|
|
6
|
+
export * from './components/index.js';
|
|
7
|
+
export * from './utils/index.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration management using hazo_config
|
|
3
|
+
* Reads from hazo_collab_forms_config.ini
|
|
4
|
+
*
|
|
5
|
+
* NOTE: This module is server-only and cannot be imported in client components
|
|
6
|
+
*/
|
|
7
|
+
import 'server-only';
|
|
8
|
+
/**
|
|
9
|
+
* Get configuration values from the config file
|
|
10
|
+
* @param section - The section name in the config file
|
|
11
|
+
* @param key - The key within the section
|
|
12
|
+
* @returns The configuration value or undefined
|
|
13
|
+
*/
|
|
14
|
+
export declare function get_config(section: string, key: string): string | undefined;
|
|
15
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,aAAa,CAAC;AA2CrB;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ3E"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration management using hazo_config
|
|
3
|
+
* Reads from hazo_collab_forms_config.ini
|
|
4
|
+
*
|
|
5
|
+
* NOTE: This module is server-only and cannot be imported in client components
|
|
6
|
+
*/
|
|
7
|
+
import 'server-only';
|
|
8
|
+
import { HazoConfig } from 'hazo_config';
|
|
9
|
+
import path from 'path';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
import { existsSync } from 'fs';
|
|
12
|
+
// Get the directory of the current module
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
+
const __dirname = path.dirname(__filename);
|
|
15
|
+
// Create a singleton instance of HazoConfig
|
|
16
|
+
let config_instance = null;
|
|
17
|
+
/**
|
|
18
|
+
* Get the HazoConfig instance, creating it if it doesn't exist
|
|
19
|
+
* Looks for config file in the consuming application's root (process.cwd())
|
|
20
|
+
* Falls back to package root if not found
|
|
21
|
+
* @returns The HazoConfig instance
|
|
22
|
+
*/
|
|
23
|
+
function get_config_instance() {
|
|
24
|
+
if (!config_instance) {
|
|
25
|
+
// First try to find config in the consuming app's root
|
|
26
|
+
const app_root_config = path.resolve(process.cwd(), 'hazo_collab_forms_config.ini');
|
|
27
|
+
// Fallback to package root (for development/testing)
|
|
28
|
+
const package_root_config = path.resolve(__dirname, '../../hazo_collab_forms_config.ini');
|
|
29
|
+
let config_path;
|
|
30
|
+
if (existsSync(app_root_config)) {
|
|
31
|
+
config_path = app_root_config;
|
|
32
|
+
}
|
|
33
|
+
else if (existsSync(package_root_config)) {
|
|
34
|
+
config_path = package_root_config;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
// Default to app root (will throw error if file doesn't exist, which is expected)
|
|
38
|
+
config_path = app_root_config;
|
|
39
|
+
}
|
|
40
|
+
config_instance = new HazoConfig({
|
|
41
|
+
filePath: config_path,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
return config_instance;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get configuration values from the config file
|
|
48
|
+
* @param section - The section name in the config file
|
|
49
|
+
* @param key - The key within the section
|
|
50
|
+
* @returns The configuration value or undefined
|
|
51
|
+
*/
|
|
52
|
+
export function get_config(section, key) {
|
|
53
|
+
try {
|
|
54
|
+
const config = get_config_instance();
|
|
55
|
+
return config.get(section, key);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
console.error('Error reading config:', error);
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,0CAA0C;AAC1C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,4CAA4C;AAC5C,IAAI,eAAe,GAAsB,IAAI,CAAC;AAE9C;;;;;GAKG;AACH,SAAS,mBAAmB;IAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,uDAAuD;QACvD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,8BAA8B,CAAC,CAAC;QACpF,qDAAqD;QACrD,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;QAE1F,IAAI,WAAmB,CAAC;QACxB,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAChC,WAAW,GAAG,eAAe,CAAC;QAChC,CAAC;aAAM,IAAI,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC3C,WAAW,GAAG,mBAAmB,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,kFAAkF;YAClF,WAAW,GAAG,eAAe,CAAC;QAChC,CAAC;QAED,eAAe,GAAG,IAAI,UAAU,CAAC;YAC/B,QAAQ,EAAE,WAAW;SACtB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,GAAW;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility function to merge Tailwind CSS classes
|
|
3
|
+
* Uses clsx and tailwind-merge for optimal class merging
|
|
4
|
+
*/
|
|
5
|
+
import { type ClassValue } from 'clsx';
|
|
6
|
+
/**
|
|
7
|
+
* Merges class names using clsx and tailwind-merge
|
|
8
|
+
* @param inputs - Class values to merge
|
|
9
|
+
* @returns Merged class string
|
|
10
|
+
*/
|
|
11
|
+
export declare function cn(...inputs: ClassValue[]): string;
|
|
12
|
+
//# sourceMappingURL=cn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cn.d.ts","sourceRoot":"","sources":["../../src/utils/cn.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAG7C;;;;GAIG;AACH,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAElD"}
|
package/dist/utils/cn.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility function to merge Tailwind CSS classes
|
|
3
|
+
* Uses clsx and tailwind-merge for optimal class merging
|
|
4
|
+
*/
|
|
5
|
+
import { clsx } from 'clsx';
|
|
6
|
+
import { twMerge } from 'tailwind-merge';
|
|
7
|
+
/**
|
|
8
|
+
* Merges class names using clsx and tailwind-merge
|
|
9
|
+
* @param inputs - Class values to merge
|
|
10
|
+
* @returns Merged class string
|
|
11
|
+
*/
|
|
12
|
+
export function cn(...inputs) {
|
|
13
|
+
return twMerge(clsx(inputs));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=cn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cn.js","sourceRoot":"","sources":["../../src/utils/cn.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAmB,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC;;;;GAIG;AACH,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for the package
|
|
3
|
+
*/
|
|
4
|
+
export { cn } from './cn.js';
|
|
5
|
+
export { use_collab_chat } from './use_collab_chat.js';
|
|
6
|
+
export type { CollabChatContext } from './use_collab_chat.js';
|
|
7
|
+
export { use_chat_messages_check } from './use_chat_messages_check.js';
|
|
8
|
+
export type { UseChatMessagesCheckOptions } from './use_chat_messages_check.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,YAAY,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook to check if unread chat messages exist for a given reference_id
|
|
3
|
+
* Used to determine if a field has active unread chat conversations
|
|
4
|
+
* Checks for messages where the current user is the receiver and read_at is null
|
|
5
|
+
*/
|
|
6
|
+
export interface UseChatMessagesCheckOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Reference ID to check for messages (typically field_data_id)
|
|
9
|
+
*/
|
|
10
|
+
reference_id: string | null | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Reference type (typically empty string for form fields)
|
|
13
|
+
*/
|
|
14
|
+
reference_type?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Recipient user ID for the chat (used to determine the receiver)
|
|
17
|
+
* Note: The current user should be the receiver for unread messages
|
|
18
|
+
*/
|
|
19
|
+
recipient_user_id?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Whether to enable the check (default: true)
|
|
22
|
+
*/
|
|
23
|
+
enabled?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Polling interval in milliseconds (default: 5000ms)
|
|
26
|
+
* Set to 0 to disable polling
|
|
27
|
+
*/
|
|
28
|
+
poll_interval?: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Hook to check if unread chat messages exist for a given reference_id
|
|
32
|
+
* Checks for messages where the current user is the receiver and read_at is null
|
|
33
|
+
* @param options Configuration options
|
|
34
|
+
* @returns Object with has_messages boolean and loading state
|
|
35
|
+
*/
|
|
36
|
+
export declare function use_chat_messages_check({ reference_id, reference_type, recipient_user_id, enabled, poll_interval, }: UseChatMessagesCheckOptions): {
|
|
37
|
+
has_messages: boolean;
|
|
38
|
+
is_loading: boolean;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=use_chat_messages_check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_chat_messages_check.d.ts","sourceRoot":"","sources":["../../src/utils/use_chat_messages_check.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAExC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,YAAY,EACZ,cAAmB,EACnB,iBAAiB,EACjB,OAAc,EACd,aAAoB,GACrB,EAAE,2BAA2B;;;EAwE7B"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook to check if unread chat messages exist for a given reference_id
|
|
3
|
+
* Used to determine if a field has active unread chat conversations
|
|
4
|
+
* Checks for messages where the current user is the receiver and read_at is null
|
|
5
|
+
*/
|
|
6
|
+
'use client';
|
|
7
|
+
import { useState, useEffect } from 'react';
|
|
8
|
+
/**
|
|
9
|
+
* Hook to check if unread chat messages exist for a given reference_id
|
|
10
|
+
* Checks for messages where the current user is the receiver and read_at is null
|
|
11
|
+
* @param options Configuration options
|
|
12
|
+
* @returns Object with has_messages boolean and loading state
|
|
13
|
+
*/
|
|
14
|
+
export function use_chat_messages_check({ reference_id, reference_type = '', recipient_user_id, enabled = true, poll_interval = 5000, }) {
|
|
15
|
+
const [has_messages, set_has_messages] = useState(false);
|
|
16
|
+
const [is_loading, set_is_loading] = useState(false);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (!enabled || !reference_id || !recipient_user_id) {
|
|
19
|
+
set_has_messages(false);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Check for unread messages by calling the chat API
|
|
24
|
+
* The API should return messages where the current user is the receiver
|
|
25
|
+
* We filter for messages where read_at is null (unread)
|
|
26
|
+
*/
|
|
27
|
+
const check_messages = async () => {
|
|
28
|
+
try {
|
|
29
|
+
set_is_loading(true);
|
|
30
|
+
const params = new URLSearchParams({
|
|
31
|
+
receiver_user_id: recipient_user_id,
|
|
32
|
+
reference_id,
|
|
33
|
+
...(reference_type && { reference_type }),
|
|
34
|
+
});
|
|
35
|
+
const response = await fetch(`/api/hazo_chat/messages?${params.toString()}`);
|
|
36
|
+
if (response.ok) {
|
|
37
|
+
const data = await response.json();
|
|
38
|
+
// Check if messages array exists and has items
|
|
39
|
+
// API returns { success: true, messages: [], current_user_id }
|
|
40
|
+
const messages = data.messages || data;
|
|
41
|
+
// Filter for unread messages only (read_at is null)
|
|
42
|
+
// Only count messages where the current user is the receiver
|
|
43
|
+
const unread_messages = Array.isArray(messages)
|
|
44
|
+
? messages.filter((msg) => {
|
|
45
|
+
// Check if message is unread (read_at is null or undefined)
|
|
46
|
+
const is_unread = msg.read_at === null || msg.read_at === undefined;
|
|
47
|
+
return is_unread;
|
|
48
|
+
})
|
|
49
|
+
: [];
|
|
50
|
+
const has_messages_result = unread_messages.length > 0;
|
|
51
|
+
set_has_messages(has_messages_result);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
set_has_messages(false);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
console.error('[use_chat_messages_check] Error checking messages:', error);
|
|
59
|
+
set_has_messages(false);
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
set_is_loading(false);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
// Initial check
|
|
66
|
+
check_messages();
|
|
67
|
+
// Set up polling if interval is greater than 0
|
|
68
|
+
let interval_id = null;
|
|
69
|
+
if (poll_interval > 0) {
|
|
70
|
+
interval_id = setInterval(check_messages, poll_interval);
|
|
71
|
+
}
|
|
72
|
+
return () => {
|
|
73
|
+
if (interval_id) {
|
|
74
|
+
clearInterval(interval_id);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}, [reference_id, reference_type, recipient_user_id, enabled, poll_interval]);
|
|
78
|
+
return { has_messages, is_loading };
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=use_chat_messages_check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_chat_messages_check.js","sourceRoot":"","sources":["../../src/utils/use_chat_messages_check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utility hook for collaboration form chat functionality
|
|
3
|
+
* Provides a reusable handler for chat icon clicks that displays field value and context
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Context information for the chat handler
|
|
7
|
+
*/
|
|
8
|
+
export interface CollabChatContext {
|
|
9
|
+
field_id?: string;
|
|
10
|
+
field_name?: string;
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Hook to create a chat handler function for collaboration form fields
|
|
15
|
+
* @param field_id - Optional field identifier
|
|
16
|
+
* @param field_name - Optional field name/label
|
|
17
|
+
* @param additional_context - Optional additional context data
|
|
18
|
+
* @returns Handler function that accepts field value and shows toast
|
|
19
|
+
*/
|
|
20
|
+
export declare function use_collab_chat(field_id?: string, field_name?: string, additional_context?: Record<string, unknown>): (field_value: string) => void;
|
|
21
|
+
//# sourceMappingURL=use_collab_chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_collab_chat.d.ts","sourceRoot":"","sources":["../../src/utils/use_collab_chat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,EACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,iBAO5B,MAAM,UAoCvB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utility hook for collaboration form chat functionality
|
|
3
|
+
* Provides a reusable handler for chat icon clicks that displays field value and context
|
|
4
|
+
*/
|
|
5
|
+
'use client';
|
|
6
|
+
import { useCallback } from 'react';
|
|
7
|
+
import { toast } from 'sonner';
|
|
8
|
+
/**
|
|
9
|
+
* Hook to create a chat handler function for collaboration form fields
|
|
10
|
+
* @param field_id - Optional field identifier
|
|
11
|
+
* @param field_name - Optional field name/label
|
|
12
|
+
* @param additional_context - Optional additional context data
|
|
13
|
+
* @returns Handler function that accepts field value and shows toast
|
|
14
|
+
*/
|
|
15
|
+
export function use_collab_chat(field_id, field_name, additional_context) {
|
|
16
|
+
/**
|
|
17
|
+
* Handler function that displays field value and context in a toast
|
|
18
|
+
* @param field_value - The current value of the field
|
|
19
|
+
*/
|
|
20
|
+
const handle_chat_click = useCallback((field_value) => {
|
|
21
|
+
// Build context message
|
|
22
|
+
const context_parts = [];
|
|
23
|
+
if (field_name) {
|
|
24
|
+
context_parts.push(`Field: ${field_name}`);
|
|
25
|
+
}
|
|
26
|
+
if (field_id) {
|
|
27
|
+
context_parts.push(`ID: ${field_id}`);
|
|
28
|
+
}
|
|
29
|
+
// Add any additional context
|
|
30
|
+
if (additional_context && Object.keys(additional_context).length > 0) {
|
|
31
|
+
const context_str = Object.entries(additional_context)
|
|
32
|
+
.map(([key, value]) => `${key}: ${String(value)}`)
|
|
33
|
+
.join(', ');
|
|
34
|
+
if (context_str) {
|
|
35
|
+
context_parts.push(context_str);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const context_message = context_parts.length > 0
|
|
39
|
+
? context_parts.join(' | ')
|
|
40
|
+
: 'Field value';
|
|
41
|
+
// Show toast with field value and context
|
|
42
|
+
toast.info(field_value || '(empty)', {
|
|
43
|
+
description: context_message,
|
|
44
|
+
duration: 5000,
|
|
45
|
+
});
|
|
46
|
+
}, [field_id, field_name, additional_context]);
|
|
47
|
+
return handle_chat_click;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=use_collab_chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_collab_chat.js","sourceRoot":"","sources":["../../src/utils/use_collab_chat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAW/B;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAiB,EACjB,UAAmB,EACnB,kBAA4C;IAE5C;;;OAGG;IACH,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,WAAmB,EAAE,EAAE;QACtB,wBAAwB;QACxB,MAAM,aAAa,GAAa,EAAE,CAAC;QAEnC,IAAI,UAAU,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,aAAa,CAAC,IAAI,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,6BAA6B;QAC7B,IAAI,kBAAkB,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrE,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;iBACnD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;iBACjD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,IAAI,WAAW,EAAE,CAAC;gBAChB,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;YAC9C,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B,CAAC,CAAC,aAAa,CAAC;QAElB,0CAA0C;QAC1C,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE;YACnC,WAAW,EAAE,eAAe;YAC5B,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;IACL,CAAC,EACD,CAAC,QAAQ,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAC3C,CAAC;IAEF,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "hazo_collab_forms",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Collaboration form elements",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.client.js",
|
|
11
|
+
"types": "./dist/index.client.d.ts"
|
|
12
|
+
},
|
|
13
|
+
"./lib": {
|
|
14
|
+
"import": "./dist/lib/index.js",
|
|
15
|
+
"types": "./dist/lib/index.d.ts"
|
|
16
|
+
},
|
|
17
|
+
"./server": {
|
|
18
|
+
"import": "./dist/index.js",
|
|
19
|
+
"types": "./dist/index.d.ts"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "tsc -p tsconfig.build.json",
|
|
27
|
+
"dev:package": "tsc -p tsconfig.build.json --watch",
|
|
28
|
+
"dev:test-app": "npm run build && cd test-app && npm run dev",
|
|
29
|
+
"build:test-app": "npm run build && cd test-app && npm run build",
|
|
30
|
+
"clean": "rm -rf dist",
|
|
31
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
32
|
+
},
|
|
33
|
+
"keywords": [
|
|
34
|
+
"collaboration",
|
|
35
|
+
"forms"
|
|
36
|
+
],
|
|
37
|
+
"author": "Pubs Abayasiri",
|
|
38
|
+
"license": "MIT",
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "git+https://github.com/pub12/hazo_collab_forms.git"
|
|
42
|
+
},
|
|
43
|
+
"bugs": {
|
|
44
|
+
"url": "https://github.com/pub12/hazo_collab_forms/issues"
|
|
45
|
+
},
|
|
46
|
+
"homepage": "https://github.com/pub12/hazo_collab_forms#readme",
|
|
47
|
+
"workspaces": [
|
|
48
|
+
"test-app"
|
|
49
|
+
],
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@types/node": "^20.11.0",
|
|
52
|
+
"@types/react": "^18.2.48",
|
|
53
|
+
"@types/react-dom": "^18.2.18",
|
|
54
|
+
"hazo_chat": "^2.0.16",
|
|
55
|
+
"typescript": "^5.3.3"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"clsx": "^2.1.0",
|
|
59
|
+
"hazo_auth": "^1.6.4",
|
|
60
|
+
"hazo_config": "^1.0.0",
|
|
61
|
+
"hazo_ui": "^2.2.1",
|
|
62
|
+
"server-only": "^0.0.1",
|
|
63
|
+
"tailwind-merge": "^2.2.0"
|
|
64
|
+
},
|
|
65
|
+
"peerDependencies": {
|
|
66
|
+
"@radix-ui/react-dialog": "^1.0.0",
|
|
67
|
+
"@radix-ui/react-label": "^2.0.0",
|
|
68
|
+
"hazo_chat": "^2.0.16",
|
|
69
|
+
"hazo_ui": "^2.2.1",
|
|
70
|
+
"react": "^18.0.0",
|
|
71
|
+
"react-dom": "^18.0.0",
|
|
72
|
+
"react-icons": "^5.0.0",
|
|
73
|
+
"sonner": "^2.0.0"
|
|
74
|
+
},
|
|
75
|
+
"overrides": {
|
|
76
|
+
"lucide-react": "^0.553.0"
|
|
77
|
+
}
|
|
78
|
+
}
|