+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Name:
+ {{rowSelected.name}}
+
+
+
+ Description:
+ {{rowSelected.description}}
+
+
+
+ Number Field:
+ {{rowSelected.number_field}}
+
+
+
+ Phone Numbers:
+ {{rowSelected.phone_numbers}}
+
+
+
+ Paragraph Fields:
+ {{rowSelected.paragraph_fields}}
+
+
+
+
+
+
+
+
+
+
+ Import File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Form/Form.component.scss b/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Form/Form.component.scss
new file mode 100644
index 0000000..a35f132
--- /dev/null
+++ b/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Form/Form.component.scss
@@ -0,0 +1,870 @@
+
+@import '../../../../../../styles.scss';
+
+// Import design tokens
+@import '../../../../../../styles/design-tokens';
+// Newbasicp1 Styles
+.ug-hero {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 24px 32px;
+ background: linear-gradient(135deg, var(--theme-primary) 0%, var(--theme-accent) 100%);
+ color: white;
+ border-radius: 16px;
+ margin-bottom: 24px;
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
+ backdrop-filter: blur(16px);
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ font-family: var(--theme-font-primary);
+
+ &__content {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+ }
+
+ &__icon {
+ background: rgba(255, 255, 255, 0.2);
+ border-radius: 50%;
+ padding: 16px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ clr-icon {
+ width: 36px;
+ height: 36px;
+ color: white;
+ }
+ }
+
+ &__title {
+ font-size: 28px;
+ font-weight: 700;
+ margin: 0;
+ color: white;
+ font-family: var(--theme-font-secondary);
+ }
+
+ &__subtitle {
+ font-size: 16px;
+ margin: 0;
+ opacity: 0.9;
+ color: rgba(255, 255, 255, 0.8);
+ }
+
+ &__actions {
+ display: flex;
+ gap: 12px;
+ }
+}
+
+.ug-btn-text {
+ margin-left: 8px;
+}
+
+// Modern Button Styles using ThemeService
+.ug-btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
+ padding: 12px 20px;
+ font-size: 14px;
+ font-weight: 500;
+ line-height: 1;
+ border-radius: 8px;
+ border: 1px solid transparent;
+ cursor: pointer;
+ transition: all 200ms ease-out;
+ text-decoration: none;
+ position: relative;
+ overflow: hidden;
+ font-family: var(--theme-font-primary);
+ z-index: 1;
+
+ &:focus {
+ outline: 2px solid var(--theme-primary);
+ outline-offset: 2px;
+ }
+
+ &:disabled {
+ opacity: 0.5;
+ cursor: not-allowed;
+ pointer-events: none;
+ }
+
+ // Sizes
+ &.ug-btn-sm {
+ padding: 8px 16px;
+ font-size: 13px;
+ height: 32px;
+ }
+
+ &.ug-btn-md {
+ padding: 12px 20px;
+ font-size: 14px;
+ height: 40px;
+ }
+
+ &.ug-btn-lg {
+ padding: 16px 24px;
+ font-size: 16px;
+ height: 48px;
+ }
+
+ // Variants
+ &.ug-btn-primary {
+ background: linear-gradient(135deg, var(--theme-primary) 0%, var(--theme-accent) 100%);
+ color: white;
+ border-color: var(--theme-primary);
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
+
+ &:hover {
+ background: linear-gradient(135deg, var(--theme-primary, #0284c7) 0%, var(--theme-accent, #7c3aed) 100%);
+ transform: translateY(-2px);
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
+ }
+
+ &:active {
+ transform: translateY(0);
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
+ }
+ }
+
+ &.ug-btn-secondary {
+ background: var(--theme-surface);
+ color: var(--theme-text);
+ border-color: rgba(0, 0, 0, 0.1);
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
+
+ &:hover {
+ background: var(--theme-background);
+ border-color: rgba(0, 0, 0, 0.2);
+ transform: translateY(-1px);
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
+ }
+ }
+
+ &.ug-btn-outline {
+ background: transparent;
+ color: var(--theme-secondary);
+ border-color: var(--theme-secondary);
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
+
+ &:hover {
+ background: rgba(100, 116, 139, 0.1); // var(--theme-secondary) with 10% opacity
+ border-color: var(--theme-secondary);
+ color: var(--theme-secondary);
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
+ }
+ }
+
+ &.ug-btn-error {
+ background: var(--theme-error, #ef4444);
+ color: white;
+ border-color: var(--theme-error, #ef4444);
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
+
+ &:hover {
+ background: var(--theme-error-dark, #dc2626);
+ border-color: var(--theme-error-dark, #dc2626);
+ transform: translateY(-2px);
+ box-shadow: 0 10px 15px -3px rgba(239, 68, 68, 0.3), 0 4px 6px -2px rgba(239, 68, 68, 0.1);
+ }
+ }
+
+ &.ug-btn-ghost {
+ background: transparent;
+ color: var(--theme-text-secondary);
+ border-color: transparent;
+
+ &:hover {
+ background: var(--theme-background);
+ color: var(--theme-text);
+ }
+ }
+}
+
+.ug-toolbar {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 24px;
+ padding: 16px;
+ background: var(--theme-surface);
+ border-radius: 12px;
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
+
+ &__left {
+ flex: 1;
+ }
+
+ &__right {
+ display: flex;
+ gap: 8px;
+ }
+}
+
+// Form Container Styles
+.form-container {
+ padding: 20px 0;
+}
+
+.form-row {
+ display: flex;
+ flex-wrap: wrap;
+ margin: 0 -12px 16px -12px;
+
+ @media (max-width: 768px) {
+ flex-direction: column;
+ margin: 0 0 16px 0;
+ }
+}
+
+.form-col {
+ flex: 1;
+ padding: 0 12px;
+ min-width: 250px;
+
+ @media (max-width: 768px) {
+ padding: 0;
+ min-width: 100%;
+ margin-bottom: 16px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+}
+
+// Password Input Container
+.password-input-container {
+ position: relative;
+
+ .password-input {
+ padding-right: 40px;
+ }
+
+ .password-toggle {
+ position: absolute;
+ right: 12px;
+ top: 50%;
+ transform: translateY(-50%);
+ background: none;
+ border: none;
+ cursor: pointer;
+ color: var(--theme-text-secondary);
+ padding: 4px;
+ border-radius: 4px;
+ transition: all 200ms ease-out;
+
+ &:hover {
+ color: var(--theme-text);
+ background: rgba(0, 0, 0, 0.05);
+ }
+
+ clr-icon {
+ width: 16px;
+ height: 16px;
+ }
+ }
+}
+
+// Textarea Styles
+textarea.ug-form-input {
+ min-height: 100px;
+ resize: vertical;
+}
+
+.ug-search {
+ position: relative;
+ max-width: 400px;
+
+ clr-icon {
+ position: absolute;
+ left: 12px;
+ top: 50%;
+ transform: translateY(-50%);
+ color: #9ca3af;
+ z-index: 1;
+ }
+
+ &__input {
+ width: 100%;
+ padding: 12px 12px 12px 40px;
+ border: 1px solid rgba(0, 0, 0, 0.1);
+ border-radius: 8px;
+ font-size: 14px;
+ transition: all 200ms ease-out;
+ background: var(--theme-surface);
+ color: var(--theme-text);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.05);
+
+ &:focus {
+ outline: none;
+ border-color: var(--theme-primary);
+ box-shadow: 0 0 0 3px rgba(14, 165, 233, 0.1); // var(--theme-primary) with 10% opacity
+ }
+ }
+}
+
+.ug-view-toggle {
+ display: flex;
+ border: 1px solid #d1d5db;
+ border-radius: 8px;
+ overflow: hidden;
+
+ .ug-btn {
+ border-radius: 0;
+ border: none;
+ background: var(--theme-surface);
+ color: var(--theme-text-secondary);
+
+ &:first-child {
+ border-right: 1px solid #d1d5db;
+ }
+
+ &.ug-btn-primary {
+ background: var(--theme-primary);
+ color: white;
+ }
+ }
+}
+
+// Modern Table Styles
+.ug-grid {
+ background: var(--theme-surface);
+ border-radius: 16px;
+ overflow: hidden;
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
+ margin-bottom: 24px;
+
+ ::ng-deep .datagrid {
+ .datagrid-head {
+ background: var(--theme-background);
+
+ .datagrid-column {
+ padding: 16px 24px;
+ font-size: 12px;
+ font-weight: 600;
+ color: var(--theme-text-secondary);
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ border-bottom: 1px solid #e5e7eb;
+ }
+ }
+
+ .datagrid-row {
+ transition: background-color 150ms ease-out;
+
+ &:hover {
+ background: var(--theme-background);
+ }
+
+ &:not(:last-child) {
+ border-bottom: 1px solid #e5e7eb;
+ }
+
+ .datagrid-cell {
+ padding: 16px 24px;
+ font-size: 14px;
+ color: var(--theme-text);
+ }
+ }
+
+ .datagrid-footer {
+ background: var(--theme-background);
+ border-top: 1px solid #e5e7eb;
+ padding: 16px 24px;
+ }
+ }
+}
+
+.ug-grid-footer {
+ background: var(--theme-background);
+ border-top: 1px solid #e5e7eb;
+}
+
+// Modern Card Styles - More beautiful design
+.ug-cards {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
+ gap: 24px;
+ margin-bottom: 24px;
+}
+
+.ug-card-item {
+ background: var(--theme-surface);
+ border: 1px solid rgba(0, 0, 0, 0.06);
+ border-radius: var(--theme-border-radius); // Using theme variable
+ box-shadow: var(--theme-shadow); // Using theme variable
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+ transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1);
+
+ &:hover {
+ transform: translateY(-5px);
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
+ border-color: rgba(14, 165, 233, 0.3); // var(--theme-primary) with 30% opacity
+ }
+
+ &__header {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ padding: 16px;
+ background: linear-gradient(135deg, rgba(14, 165, 233, 0.1), transparent); // var(--theme-primary) with 10% opacity
+ min-height: 60px;
+ }
+
+ &__icon {
+ clr-icon {
+ width: 24px;
+ height: 24px;
+ color: var(--theme-primary);
+ }
+ }
+
+ &__title {
+ font-weight: 700;
+ flex: 1 1 auto;
+ font-size: 18px;
+ color: var(--theme-text);
+ max-width: 60%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ &__badge {
+ margin-left: auto;
+ display: inline-flex;
+ align-items: center;
+ padding: 4px 12px;
+ font-size: 12px;
+ font-weight: 600;
+ border-radius: 9999px;
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ }
+
+ &__body {
+ padding: 16px;
+ display: grid;
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ gap: 12px;
+ }
+
+ &__footer {
+ padding: 16px;
+ display: flex;
+ gap: 8px;
+ border-top: 1px solid rgba(0, 0, 0, 0.06);
+ background: var(--theme-background);
+ }
+}
+
+.ug-kv {
+ display: flex;
+ justify-content: space-between;
+ font-size: 14px;
+
+ span {
+ color: var(--theme-text-secondary);
+ }
+
+ strong {
+ color: var(--theme-text);
+ font-weight: 500;
+ text-align: right;
+ max-width: 60%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+}
+
+// Theme the card footer buttons
+.ug-card-item__footer .ug-btn {
+ border-radius: 10px;
+ flex: 1;
+ justify-content: center;
+}
+
+.ug-card-item__footer .ug-btn.ug-btn-outline {
+ border: 1px solid var(--theme-secondary);
+ color: var(--theme-secondary);
+ background: transparent;
+
+ &:hover {
+ background: rgba(100, 116, 139, 0.1); // var(--theme-secondary) with 10% opacity
+ border-color: var(--theme-secondary);
+ color: var(--theme-secondary);
+ }
+}
+
+.ug-card-item__footer .ug-btn.ug-btn-error {
+ background: var(--theme-error, #ef4444);
+ color: #fff;
+ border-color: var(--theme-error, #ef4444);
+
+ &:hover {
+ background: var(--theme-error-dark, #dc2626);
+ border-color: var(--theme-error-dark, #dc2626);
+ transform: translateY(-2px);
+ }
+}
+
+// Table view action buttons
+.ug-action-item {
+ @extend .ug-btn;
+ @extend .ug-btn-ghost;
+ @extend .ug-btn-sm;
+ width: 100%;
+ justify-content: flex-start;
+ margin-bottom: 4px;
+ text-align: left;
+
+ clr-icon {
+ width: 16px;
+ height: 16px;
+ margin-right: 8px;
+ }
+
+ &.ug-btn-error {
+ color: var(--theme-error, #ef4444);
+
+ &:hover {
+ background: rgba(239, 68, 68, 0.1);
+ }
+ }
+}
+
+// Ensure action overflow is visible
+::ng-deep .datagrid-action-overflow {
+ button.action-item {
+ display: flex;
+ align-items: center;
+ width: 100%;
+ text-align: left;
+ padding: 8px 12px;
+
+ clr-icon {
+ margin-right: 8px;
+ }
+ }
+}
+
+// Status Badges
+.ug-status-badge {
+ display: inline-flex;
+ align-items: center;
+ padding: 6px 16px;
+ font-size: 13px;
+ font-weight: 600;
+ border-radius: 9999px;
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+}
+
+.ug-status-enabled {
+ background: linear-gradient(135deg, rgba(16, 185, 129, 0.1) 0%, rgba(16, 185, 129, 0.05) 100%);
+ color: #10b981;
+}
+
+.ug-status-disabled {
+ background: linear-gradient(135deg, rgba(239, 68, 68, 0.1) 0%, rgba(239, 68, 68, 0.05) 100%);
+ color: #ef4444;
+}
+
+// Form Styles
+.ug-form-group {
+ margin-bottom: 20px;
+}
+
+.ug-form-label {
+ display: block;
+ font-size: 14px;
+ font-weight: 500;
+ color: var(--theme-text);
+ margin-bottom: 8px;
+ font-family: var(--theme-font-primary);
+}
+
+.ug-form-input, .ug-form-select {
+ width: 100%;
+ padding: 12px 16px;
+ font-size: 14px;
+ line-height: 1.5;
+ color: var(--theme-text);
+ background: var(--theme-surface);
+ border: 1px solid rgba(0, 0, 0, 0.1);
+ border-radius: 8px;
+ transition: all 200ms ease-out;
+ margin-bottom: 0;
+ font-family: var(--theme-font-primary);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.05);
+
+ &:focus {
+ outline: none;
+ border-color: var(--theme-primary);
+ box-shadow: 0 0 0 3px rgba(14, 165, 233, 0.1); // var(--theme-primary) with 10% opacity
+ }
+
+ &:disabled {
+ background: var(--theme-background);
+ color: var(--theme-text-secondary);
+ cursor: not-allowed;
+ }
+
+ &.error {
+ border-color: #ef4444;
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1);
+ }
+
+ &::placeholder {
+ color: var(--theme-text-secondary);
+ }
+}
+
+.ug-form-select {
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");
+ background-position: right 12px center;
+ background-repeat: no-repeat;
+ background-size: 16px 12px;
+ padding-right: 40px;
+ appearance: none;
+}
+
+.ug-form-error {
+ color: #ef4444;
+ font-size: 12px;
+ margin-top: 6px;
+ font-weight: 500;
+}
+
+.required-field {
+ color: #ef4444;
+ margin-left: 4px;
+}
+
+.ug-file-input {
+ width: 100%;
+ padding: 12px;
+ border: 1px solid rgba(0, 0, 0, 0.1);
+ border-radius: 8px;
+ background: var(--theme-surface);
+ color: var(--theme-text);
+
+ &::file-selector-button {
+ @extend .ug-btn;
+ @extend .ug-btn-secondary;
+ margin-right: 12px;
+ padding: 8px 16px;
+ border: none;
+ }
+}
+
+// Delete Modal Styles
+.ug-delete-header {
+ text-align: center;
+ padding: 24px;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
+}
+
+.ug-delete-icon {
+ color: #ef4444;
+ margin-bottom: 16px;
+}
+
+.ug-delete-title {
+ font-size: 24px;
+ font-weight: 700;
+ color: var(--theme-text);
+ margin: 0 0 8px 0;
+}
+
+.ug-delete-subtitle {
+ font-size: 16px;
+ color: var(--theme-text-secondary);
+ margin: 0;
+}
+
+.ug-delete-details {
+ padding: 24px;
+}
+
+.ug-delete-detail-item {
+ display: flex;
+ justify-content: space-between;
+ padding: 12px 0;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
+
+ &:last-child {
+ border-bottom: none;
+ }
+}
+
+.ug-delete-detail-label {
+ font-weight: 500;
+ color: var(--theme-text-secondary);
+}
+
+.ug-delete-detail-value {
+ font-weight: 600;
+ color: var(--theme-text);
+}
+
+.delete {
+ color: #ef4444;
+ text-align: center;
+ margin-bottom: 16px;
+ font-weight: 600;
+ font-size: 20px;
+}
+
+.heading {
+ text-align: center;
+ margin-bottom: 24px;
+ color: var(--theme-text);
+ font-weight: 600;
+}
+
+// Modal Header
+::ng-deep .modal-header {
+ background: linear-gradient(135deg, var(--theme-primary) 0%, var(--theme-accent) 100%);
+ color: white;
+ border-radius: 16px 16px 0 0 !important;
+ padding: 20px 24px !important;
+
+ .modal-title {
+ color: white;
+ font-weight: 600;
+ font-size: 20px;
+ margin: 0;
+ font-family: var(--theme-font-secondary);
+ }
+
+ .close {
+ color: white;
+ opacity: 0.8;
+
+ &:hover {
+ opacity: 1;
+ }
+ }
+}
+
+// Modal Body
+::ng-deep .modal-body {
+ padding: 24px !important;
+}
+
+// Modal Footer
+::ng-deep .modal-footer {
+ padding: 20px 24px !important;
+ background: var(--theme-background);
+ border-radius: 0 0 16px 16px !important;
+ border-top: 1px solid rgba(0, 0, 0, 0.05) !important;
+ display: flex;
+ justify-content: flex-end;
+ gap: 12px;
+}
+
+// Recaptcha Container Styles
+.recaptcha-container {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+}
+
+.recaptcha-code {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ padding: 12px;
+ background: var(--theme-background);
+ border-radius: 8px;
+ border: 1px solid rgba(0, 0, 0, 0.1);
+
+ b {
+ font-size: 18px;
+ letter-spacing: 2px;
+ font-family: 'Courier New', monospace;
+ }
+}
+
+// Toggle Styles
+.clr-toggle-wrapper {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+
+ label {
+ margin-bottom: 0;
+ font-weight: 500;
+ color: var(--theme-text);
+ }
+}
+
+// URL Field Styles
+.ug-form-input[type="url"] {
+ font-family: monospace;
+}
+// Responsive adjustments
+@media (max-width: 768px) {
+ .ug-hero {
+ flex-direction: column;
+ gap: 16px;
+ text-align: center;
+
+ &__content {
+ flex-direction: column;
+ text-align: center;
+ }
+
+ &__actions {
+ width: 100%;
+ justify-content: center;
+ flex-wrap: wrap;
+ }
+ }
+
+ .ug-toolbar {
+ flex-direction: column;
+ gap: 16px;
+ }
+
+ .ug-search {
+ max-width: 100%;
+ }
+
+ .ug-cards {
+ grid-template-columns: 1fr;
+ }
+
+ .ug-card-item {
+ &__header {
+ flex-direction: column;
+ text-align: center;
+
+ &__icon {
+ margin-right: 0;
+ margin-bottom: 16px;
+ }
+ }
+
+ &__footer {
+ justify-content: center;
+ }
+ }
+.recaptcha-code {
+ flex-direction: column;
+ align-items: flex-start;
+
+ .ug-btn {
+ align-self: flex-end;
+ }
+ }}
\ No newline at end of file
diff --git a/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Form/Form.component.ts b/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Form/Form.component.ts
new file mode 100644
index 0000000..cf9697d
--- /dev/null
+++ b/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Form/Form.component.ts
@@ -0,0 +1,411 @@
+import { Component, OnInit } from '@angular/core';
+import { ToastrService } from 'ngx-toastr';
+import { AlertService } from 'src/app/services/alert.service';
+import { Formservice} from './Form.service';
+import { AbstractControl, FormArray, FormBuilder, FormGroup, Validators, ValidationErrors } from '@angular/forms';
+import { ExtensionService } from 'src/app/services/fnd/extension.service';
+import { DashboardContentModel2 } from 'src/app/models/builder/dashboard';
+import { Formcardvariable } from './Form_cardvariable';
+import { UserInfoService } from 'src/app/services/user-info.service';
+import { CsvService } from 'src/app/services/csv.service';
+import { TranslateService } from '@ngx-translate/core';
+import { ThemeService } from 'src/app/services/theme.service';
+import { Subscription } from 'rxjs';
+import { ExcelService } from 'src/app/services/excel.service';
+import * as moment from 'moment';
+declare var JsBarcode: any;
+@Component({
+ selector: 'app-Form',
+ templateUrl: './Form.component.html',
+ styleUrls: ['./Form.component.scss']
+})
+export class FormComponent implements OnInit {
+ cardButton = Formcardvariable.cardButton;
+ cardmodeldata = Formcardvariable.cardmodeldata;
+ public dashboardArray: DashboardContentModel2[];
+ isCardview = Formcardvariable.cardButton;
+ cardmodal; changeView(){
+ this.isCardview = !this.isCardview;
+ }
+ beforeText(fieldtext: string): string { // Extract the text before the first '<'
+ const index = fieldtext.indexOf('<');
+ return index !== -1 ? fieldtext.substring(0, index) : fieldtext;
+ }
+ afterText(fieldtext: string): string { // Extract the text after the last '>'
+ const index = fieldtext.lastIndexOf('>');
+ return index !== -1 ? fieldtext.substring(index + 1) : '';
+ }
+ transform(fieldtext: string): string {
+ const match = fieldtext.match(/<([^>]*)>/);
+ return match ? match[1] : ''; // Extract the text between '<' and '>'
+ }
+ userrole;
+ rowSelected :any= {};
+ modaldelete=false;
+ modalEdit=false;
+ modalAdd= false;
+ public entryForm: FormGroup;
+ loading = false;
+ product;
+ modalOpenedforNewLine = false;
+ newLine:any;
+ additionalFieldsFromBackend: any[] = [];
+ formcode = 'Form_formCode'
+tableName = 'Form'; checkFormCode; selected: any[] = [];
+filterText: string = '';
+ viewMode: 'table' | 'cards' = 'cards';
+ private themeSubscription: Subscription; constructor(
+ private extensionService: ExtensionService,
+private userInfoService:UserInfoService,
+ private mainService:Formservice,
+ private alertService: AlertService,
+ private toastr: ToastrService,
+private csvService: CsvService,
+ private translate: TranslateService,
+ private themeService: ThemeService,
+private excel: ExcelService, private _fb: FormBuilder,
+ ) { }
+
+ switchLanguage(language: string) {
+ this.translate.use(language);
+ }
+ private editInterval: any;
+// component button
+ ngOnInit(): void {
+ this.themeSubscription = this.themeService.currentTheme$.subscribe(() => {
+ // Theme changes will automatically update CSS variables
+ // This triggers a re-render of themed elements
+ });
+ if(this.cardmodeldata !== ''){
+ this.cardmodal = JSON.parse(this.cardmodeldata);
+ this.dashboardArray = this.cardmodal.dashboard.slice();
+ console.log(this.dashboardArray)
+ }
+ this.userrole=this.userInfoService.getRoles();
+ this.getData();
+ this.entryForm = this._fb.group({
+name : [null],
+
+description : [null],
+
+number_field : [null,[Validators.required]],
+
+phone_numbers: ['+91'],
+
+paragraph_fields : [null],
+
+
+
+
+
+
+
+
+
+
+
+
+ }); // component_button200
+ // form code start
+ this.extensionService.getJsonObjectsByFormCodeList(this.formcode).subscribe(data => {
+ console.log(data);
+ const jsonArray = data.map((str) => JSON.parse(str));
+ this.additionalFieldsFromBackend = jsonArray;
+ this.checkFormCode = this.additionalFieldsFromBackend.some(field => field.formCode === "Form_formCode");
+ console.log(this.checkFormCode);
+ console.log(this.additionalFieldsFromBackend);
+ if (this.additionalFieldsFromBackend && this.additionalFieldsFromBackend.length > 0) {
+ this.additionalFieldsFromBackend.forEach(field => {
+ if (field.formCode === this.formcode) {
+ if (!this.entryForm.contains(field.extValue)) {
+ // Add the control only if it doesn't exist in the form
+ this.entryForm.addControl(field.extValue, this._fb.control(field.fieldValue));
+ }
+ }
+ });
+ }
+ });
+ console.log(this.entryForm.value);
+ // form code end
+
+
+
+
+
+
+
+
+
+
+
+ }
+ ngOnDestroy(): void {
+ if (this.themeSubscription) {
+ this.themeSubscription.unsubscribe();
+ }
+ if (this.editInterval) {
+ clearInterval(this.editInterval);
+ }
+ }
+ get filteredGroups(): any[] {
+ const items: any[] = (this.product as unknown as any[]) || [];
+ const text = (this.filterText || '').toLowerCase();
+ if (!text) { return items; }
+ return items.filter(g => (
+((g?.name || '').toString()).toLowerCase().includes(text) ||
+
+((g?.description || '').toString()).toLowerCase().includes(text) ||
+
+((g?.number_field || '').toString()).toLowerCase().includes(text) ||
+
+((g?.phone_numbers || '').toString()).toLowerCase().includes(text) ||
+
+((g?.paragraph_fields || '').toString()).toLowerCase().includes(text)
+
+ ));
+ }
+
+ setViewMode(mode: 'table' | 'cards') { this.viewMode = mode; }
+ onExport() {
+ this.excel.exportAsExcelFile(this.product, 'user_',
+ moment().format('YYYYMMDD_HHmmss'))
+ }
+
+
+
+
+
+
+
+
+
+ error;
+ getData() {
+ this.mainService.getAll().subscribe((data) => {
+ console.log(data);
+ this.product = data;
+this.product = [...this.product].reverse(); if(this.product.length==0){
+ this.error="No Data Available"
+ }
+ },(error) => {
+ console.log(error);
+ if(error){
+ this.error="Server Error";
+ }
+ });
+ }
+ onEdit(row) {
+ this.rowSelected = row;
+
+
+
+
+
+
+
+
+
+
+
+ this.modalEdit = true;
+ }
+ onDelete(row) {
+ this.rowSelected = row;
+ this.modaldelete=true;
+ }
+ delete(id)
+ {
+ this.modaldelete = false;
+ console.log("in delete "+id);
+ this.mainService.delete(id).subscribe(
+ (data) => {
+ console.log(data);
+ this.ngOnInit();
+ if (data) { this.toastr.success('Deleted successfully'); }
+ });
+ }
+ onUpdate(id) {
+ this.modalEdit = false;
+
+
+
+
+
+
+
+
+
+
+ //console.log("in update");
+ console.log("id " + id);
+ console.log(this.rowSelected);
+ //console.log("out update");
+ this.mainService.update(id, this.rowSelected).subscribe(
+ (data) => {
+ console.log(data);
+ if (data || data.status >= 200 && data.status <= 299) {
+ this.toastr.success("Update Successfully");
+ }
+setTimeout(() => {
+ this.ngOnInit();
+ }, 500);
+
+
+
+
+
+
+
+
+
+
+ }, (error) => {
+ console.log(error);
+ if (error.status >= 200 && error.status <= 299) {
+ // this.toastr.success("update Succesfully");
+ }
+ if (error.status >= 400 && error.status <= 499) {
+ this.toastr.error("Not Updated");
+ }
+ if (error.status >= 500 && error.status <= 599) {
+ this.toastr.error("Not Updated");
+ }
+ });
+ setTimeout(() => {
+ this.ngOnInit();
+ }, 500);
+ }
+onCreate() {
+ this.modalAdd=false;
+
+
+
+
+
+
+
+
+
+
+ this.mainService.create(this.entryForm.value).subscribe(
+ (data) => {
+ console.log(data);
+ if (data || data.status >= 200 && data.status <= 299) {
+ this.toastr.success("Added Successfully");
+ }
+setTimeout(() => {
+ this.ngOnInit();
+ }, 500);
+
+
+
+
+
+
+
+
+
+
+ }, (error) => {
+ console.log(error);
+ if (error.status >= 200 && error.status <= 299) {
+ // this.toastr.success("Added Succesfully");
+ }
+ if (error.status >= 400 && error.status <= 499) {
+ this.toastr.error("Not Added");
+ }
+ if (error.status >= 500 && error.status <= 599) {
+ this.toastr.error("Not Added");
+ }
+ });
+ setTimeout(() => {
+ this.ngOnInit();
+ }, 500);
+ }
+ goToAdd() {
+this.modalAdd = true; this.submitted = false;
+
+
+
+
+
+
+
+
+
+
+ }
+ submitted = false;
+onSubmit() {
+ console.log(this.entryForm.value);
+ this.submitted = true;
+ if (this.entryForm.invalid) {
+ return;
+ }this.onCreate();
+
+}
+
+
+rsModaldescription = false;
+goToReplaceStringdescription(row){
+this.rowSelected = row; this.rsModaldescription =true; }
+
+
+
+isValidPhone_numbers(phone: string): boolean {
+ const phonePattern = /^(\+[1-9][0-9]{0,2})?[1-9][0-9]{9}$/;
+ return phonePattern.test(phone);
+}
+
+rsModalparagraph_fields = false;
+ goToReplaceStringparagraph_fields (row){
+ this.rowSelected = row; this.rsModalparagraph_fields =true; }
+
+
+ // csv
+
+ modalCsv = false;
+ selectedFiles: File;
+ fileList;
+ ttype = 'usergroupmaintenance';
+
+
+ // Import CSV
+ public selectFile(event) {
+ this.selectedFiles = event.target.files[0];
+ // this.saveCsv();
+ }
+
+ csvImport() {
+ console.log("import CSV");
+ this.modalCsv = true;
+ }
+ saveCsv() {
+ this.csvService.importCsv(this.selectedFiles, this.ttype).subscribe(data => {
+ console.log(data);
+ this.fileList = data;
+ this.modalCsv = false;
+ },
+ (error) => {
+ console.log(error);
+ if (error.status == 202) {
+ this.toastr.success(error.error.text)
+ }
+ });
+ }
+
+ downloadFiles() {
+ this.csvService.downloadCsvs(this.ttype);
+
+ }
+// updateaction
+}
+
+
+
+
+
+
+
+
+
diff --git a/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Form/Form.service.ts b/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Form/Form.service.ts
new file mode 100644
index 0000000..d6cfe69
--- /dev/null
+++ b/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Form/Form.service.ts
@@ -0,0 +1,43 @@
+import { Injectable } from '@angular/core';
+import { Observable } from "rxjs";
+import { HttpClient, HttpHeaders, HttpParams, } from "@angular/common/http";
+import { ApiRequestService } from "src/app/services/api/api-request.service";
+import { environment } from 'src/environments/environment';
+@Injectable({
+ providedIn: 'root'
+})
+export class Formservice{
+ private baseURL = "Form/Form" ; constructor(
+ private http: HttpClient,
+ private apiRequest: ApiRequestService,
+ ) { }
+ getAll(page?: number, size?: number): Observable
{
+ return this.apiRequest.get(this.baseURL);
+ }
+ getById(id: number): Observable {
+ const _http = this.baseURL + "/" + id;
+ return this.apiRequest.get(_http);
+ }
+ create(data: any): Observable {
+ return this.apiRequest.post(this.baseURL, data);
+ }
+ update(id: number, data: any): Observable {
+ const _http = this.baseURL + "/" + id;
+ return this.apiRequest.put(_http, data);
+ }
+ delete(id: number): Observable {
+ const _http = this.baseURL + "/" + id;
+ return this.apiRequest.delete(_http);
+ }
+
+
+
+
+
+
+
+
+
+
+// updateaction
+}
\ No newline at end of file
diff --git a/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Form/Form_cardvariable.ts b/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Form/Form_cardvariable.ts
new file mode 100644
index 0000000..a646ee8
--- /dev/null
+++ b/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Form/Form_cardvariable.ts
@@ -0,0 +1,4 @@
+export const Formcardvariable = {
+ "cardButton": false,
+ "cardmodeldata": ``
+}
\ No newline at end of file
diff --git a/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/main-routing.module.ts b/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/main-routing.module.ts
index 33d8388..c8f50b9 100644
--- a/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/main-routing.module.ts
+++ b/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/main-routing.module.ts
@@ -1,3 +1,4 @@
+import { FormComponent } from './BuilderComponents/basicp1/Form/Form.component';
import { SequencegenaratorComponent } from './fnd/sequencegenarator/sequencegenarator.component';
import { Component, NgModule } from '@angular/core';
@@ -261,6 +262,9 @@ const routes: Routes = [
// buildercomponents
+{path:'Form',component:FormComponent},
+
+
{ path: 'tokenregistery', component: Token_registeryComponent },
diff --git a/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/main.module.ts b/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/main.module.ts
index 2dcc8f1..1129c93 100644
--- a/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/main.module.ts
+++ b/testnewang12-front-f/authsec_angular_clarity_modern/frontend/angular-clarity-master/src/app/modules/main/main.module.ts
@@ -1,3 +1,4 @@
+import { FormComponent } from './BuilderComponents/basicp1/Form/Form.component';
import { CommonModule } from '@angular/common';
@@ -136,6 +137,9 @@ import { ThemeCustomizationComponent } from './theme-customization/theme-customi
// buildercomponents
+FormComponent,
+
+