Skip to main content
Glama
DuplicateTemplateView.jsx7.54 kB
import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; function DuplicateTemplateView({ template, onBack, onConfirm }) { const { t } = useTranslation(); const [newName, setNewName] = useState(''); const [error, setError] = useState(''); const [duplicating, setDuplicating] = useState(false); if (!template) { return ( <div className="duplicate-template-view"> <div className="duplicate-template-header"> <button className="back-button" onClick={onBack}> {t('backToTemplates')} </button> <h2>{t('noTemplateSelected')}</h2> </div> </div> ); } const handleSubmit = async (e) => { e.preventDefault(); if (!newName.trim()) { setError(t('pleaseEnterDuplicateName')); return; } if (newName.trim() === template.functionName) { setError(t('duplicateNameMustBeDifferent')); return; } setDuplicating(true); try { await onConfirm(newName.trim()); } catch (err) { setError(t('failedToDuplicateTemplate') + ': ' + err.message); setDuplicating(false); } }; return ( <div className="duplicate-template-view"> <div className="duplicate-template-header"> <div className="header-left"> <button className="back-button" onClick={onBack} title={t('backToTemplateList')}> {t('backToTemplates')} </button> <h2>{t('duplicateTemplate')}: {template.functionName || template.name}</h2> </div> </div> <div className="duplicate-template-content"> <div className="duplicate-info-section"> <h3>{t('whyDuplicate')}</h3> <p>{t('duplicateExplanation')}</p> <div className="use-cases-grid"> <div className="use-case-card"> <h4>{t('createVariations')}</h4> <p>{t('createVariationsDesc')}</p> <ul> <li>Security-focused analysis</li> <li>Performance optimization</li> <li>Different project types</li> <li>Client-specific requirements</li> </ul> </div> <div className="use-case-card"> <h4>{t('safeExperimentation')}</h4> <p>{t('safeExperimentationDesc')}</p> <ul> <li>Try new prompt strategies</li> <li>Experiment with different formats</li> <li>Test edge cases</li> <li>Keep a working backup</li> </ul> </div> <div className="use-case-card"> <h4>{t('templateLibraries')}</h4> <p>{t('templateLibrariesDesc')}</p> <ul> <li>Department-specific templates</li> <li>Technology stack variations</li> <li>Language/framework specific</li> <li>Different complexity levels</li> </ul> </div> <div className="use-case-card"> <h4>{t('versionManagement')}</h4> <p>{t('versionManagementDesc')}</p> <ul> <li>Stable vs experimental</li> <li>Quick vs thorough analysis</li> <li>Simple vs detailed output</li> <li>Before major changes</li> </ul> </div> </div> </div> <div className="duplicate-form-section"> <h3>{t('createDuplicate')}</h3> <div className="original-template-info"> <h4>{t('originalTemplate')}</h4> <div className="template-details"> <div className="detail-row"> <span className="label">Name:</span> <span className="value">{template.functionName}</span> </div> <div className="detail-row"> <span className="label">Status:</span> <span className={`status-badge status-${template.status}`}>{template.status}</span> </div> {template.description && ( <div className="detail-row"> <span className="label">Description:</span> <span className="value">{template.description}</span> </div> )} </div> </div> <form onSubmit={handleSubmit} className="duplicate-form"> <div className="form-group"> <label htmlFor="newName"> {t('newTemplateName')} <span className="required">{t('required')}</span> </label> <input type="text" id="newName" value={newName} onChange={(e) => { setNewName(e.target.value); setError(''); }} placeholder={`${template.functionName}_v2`} autoFocus disabled={duplicating} /> {error && <div className="error-message">{error}</div>} <small className="form-hint"> {t('nameHint')} </small> </div> <div className="duplicate-preview-section"> <h4>{t('whatWillHappen')}</h4> <div className="preview-steps"> <div className="step"> <span className="step-number">1</span> <div className="step-content"> <strong>{t('createNewTemplate')}</strong> <p>A new custom template named <code>{newName || '[your-name-here]'}</code> will be created</p> </div> </div> <div className="step"> <span className="step-number">2</span> <div className="step-content"> <strong>{t('copyContent')}</strong> <p>All content from the original template will be copied exactly</p> </div> </div> <div className="step"> <span className="step-number">3</span> <div className="step-content"> <strong>{t('independentEditing')}</strong> <p>You can edit the duplicate without affecting the original</p> </div> </div> <div className="step"> <span className="step-number">4</span> <div className="step-content"> <strong>{t('readyToUse')}</strong> <p>The duplicate will appear in your template list as a custom template</p> </div> </div> </div> </div> <div className="form-actions"> <button type="submit" className="primary-btn" disabled={!newName.trim() || duplicating} > {duplicating ? t('creatingDuplicate') : t('createDuplicate')} </button> <button type="button" className="secondary-btn" onClick={onBack} disabled={duplicating} > {t('cancel')} </button> </div> </form> </div> </div> </div> ); } export default DuplicateTemplateView;

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cjo4m06/mcp-shrimp-task-manager'

If you have feedback or need assistance with the MCP directory API, please join our Discord server