@citiwave/im-disclaimer-modal
Version:
A customizable React disclaimer modal component with theme support
104 lines (103 loc) • 4.47 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createGroup = createGroup;
const inquirer_1 = __importDefault(require("inquirer"));
const promises_1 = __importDefault(require("fs/promises"));
const path_1 = __importDefault(require("path"));
const chalk_1 = __importDefault(require("chalk"));
const config_1 = require("../utils/config");
async function getAvailableDisclaimers(disclaimersDir) {
try {
// Read the config file to get available disclaimers
const configPath = path_1.default.join(disclaimersDir, '_config.json');
const configContent = await promises_1.default.readFile(configPath, 'utf-8');
const config = JSON.parse(configContent);
// Return the keys from the config as available disclaimers
return Object.keys(config);
}
catch (error) {
console.error(chalk_1.default.red('Error reading disclaimers config:'), error);
process.exit(1);
}
}
async function createGroup() {
try {
// Get the configured disclaimers directory
const disclaimersDir = await (0, config_1.getDefaultDirectory)();
// Get available disclaimers from config
const availableDisclaimers = await getAvailableDisclaimers(disclaimersDir);
// Get group name
const { groupName } = await inquirer_1.default.prompt([
{
type: 'input',
name: 'groupName',
message: 'Enter a name for your disclaimer group:',
validate: (input) => {
if (!input)
return 'Group name is required';
if (!/^[a-zA-Z0-9-]+$/.test(input)) {
return 'Group name can only contain letters, numbers, and hyphens';
}
return true;
}
}
]);
// Select disclaimers for the group
const { selectedDisclaimers } = await inquirer_1.default.prompt([
{
type: 'checkbox',
name: 'selectedDisclaimers',
message: 'Select disclaimers to include in this group:',
choices: availableDisclaimers,
validate: (input) => {
if (input.length === 0)
return 'Please select at least one disclaimer';
return true;
}
}
]);
// Set priorities for selected disclaimers
const priorities = {};
for (let i = 0; i < selectedDisclaimers.length; i++) {
const { priority } = await inquirer_1.default.prompt([
{
type: 'number',
name: 'priority',
message: `Set priority for ${selectedDisclaimers[i]} (lower number = higher priority):`,
default: i + 1,
validate: (input) => {
if (isNaN(input) || input < 1) {
return 'Priority must be a positive number';
}
return true;
}
}
]);
priorities[selectedDisclaimers[i]] = priority;
}
// Create group data
const groupData = {
name: groupName,
disclaimers: selectedDisclaimers,
priorities
};
// Ensure groups directory exists in the configured disclaimers directory
const groupsDir = path_1.default.join(disclaimersDir, 'groups');
await promises_1.default.mkdir(groupsDir, { recursive: true });
// Write group file
const filePath = path_1.default.join(groupsDir, `${groupName}.json`);
await promises_1.default.writeFile(filePath, JSON.stringify(groupData, null, 2));
console.log(chalk_1.default.green(`\n✓ Successfully created disclaimer group: ${groupName}`));
console.log(chalk_1.default.blue('\nGroup configuration:'));
console.log(JSON.stringify(groupData, null, 2));
console.log(chalk_1.default.yellow(`\nGroup file created at: ${filePath}`));
}
catch (error) {
console.error(chalk_1.default.red('Error creating disclaimer group:'), error);
process.exit(1);
}
}