+ @if (isFieldEnabled('street') && address.street) {
+
+
{{ 'labels.inputs.Street' | translate }}
+
{{ address.street }}
+
}
- @if (isFieldEnabled('addressLine1')) {
-
{{ 'labels.inputs.Address Line' | translate }} 1 : {{ address.addressLine1 }}
+ @if (isFieldEnabled('addressLine1') && address.addressLine1) {
+
+
{{ 'labels.inputs.Address Line' | translate }} 1
+
{{ address.addressLine1 }}
+
}
- @if (isFieldEnabled('addressLine2')) {
-
{{ 'labels.inputs.Address Line' | translate }} 2 : {{ address.addressLine2 }}
+ @if (isFieldEnabled('addressLine2') && address.addressLine2) {
+
+
{{ 'labels.inputs.Address Line' | translate }} 2
+
{{ address.addressLine2 }}
+
}
- @if (isFieldEnabled('addressLine3')) {
-
{{ 'labels.inputs.Address Line' | translate }} 3 : {{ address.addressLine3 }}
+ @if (isFieldEnabled('addressLine3') && address.addressLine3) {
+
+
{{ 'labels.inputs.Address Line' | translate }} 3
+
{{ address.addressLine3 }}
+
}
- @if (isFieldEnabled('townVillage')) {
-
{{ 'labels.inputs.Town / Village' | translate }} : {{ address.townVillage }}
+ @if (isFieldEnabled('townVillage') && address.townVillage) {
+
+
{{ 'labels.inputs.Town / Village' | translate }}
+
{{ address.townVillage }}
+
}
- @if (isFieldEnabled('city')) {
-
{{ 'labels.inputs.City' | translate }} : {{ address.city }}
+ @if (isFieldEnabled('city') && address.city) {
+
+
{{ 'labels.inputs.City' | translate }}
+
{{ address.city }}
+
}
@if (isFieldEnabled('stateProvinceId')) {
-
{{ 'labels.inputs.State / Province' | translate }} :
- {{ getSelectedValue('stateProvinceIdOptions', address.stateProvinceId)?.name }}
+
+
{{ 'labels.inputs.State / Province' | translate }}
+
{{ getSelectedValue('stateProvinceIdOptions', address.stateProvinceId)?.name || '-' }}
+
}
@if (isFieldEnabled('countryId')) {
-
{{ 'labels.inputs.Country' | translate }} :
- {{ getSelectedValue('countryIdOptions', address.countryId)?.name }}
+
+
{{ 'labels.inputs.Country' | translate }}
+
{{ getSelectedValue('countryIdOptions', address.countryId)?.name || '-' }}
+
}
- @if (isFieldEnabled('postalCode')) {
-
{{ 'labels.inputs.Postal Code' | translate }} : {{ address.postalCode }}
+ @if (isFieldEnabled('postalCode') && address.postalCode) {
+
+
{{ 'labels.inputs.Postal Code' | translate }}
+
{{ address.postalCode }}
+
}
- @if (isFieldEnabled('isActive')) {
-
{{ 'labels.inputs.Active Status' | translate }} : {{ address.isActive }}
- }
-
+
}
diff --git a/src/app/clients/clients-view/address-tab/address-tab.component.scss b/src/app/clients/clients-view/address-tab/address-tab.component.scss
index a2c909a18..8166ba235 100644
--- a/src/app/clients/clients-view/address-tab/address-tab.component.scss
+++ b/src/app/clients/clients-view/address-tab/address-tab.component.scss
@@ -6,30 +6,236 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-.tab-container {
- padding: 1%;
- margin: 1%;
+$primary: #1a73e8;
+$primary-light: #e8f0fe;
+$gray-50: #f8f9fa;
+$gray-100: #f1f3f4;
+$gray-200: #e8eaed;
+$gray-500: #9aa0a6;
+$gray-700: #5f6368;
+$gray-900: #202124;
+$white: #fff;
+$green: #34a853;
+$green-light: #e6f4ea;
+$red: #ea4335;
+$red-light: #fce8e6;
- .action-button {
- margin-left: auto;
+.addr-container {
+ padding: 20px 24px;
+}
+
+// Header
+.addr-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+
+ &__left {
+ display: flex;
+ align-items: center;
+ gap: 10px;
}
- .address {
- .address-actions {
- margin-top: 1%;
+ &__icon {
+ font-size: 18px;
+ color: $primary;
+ }
- button {
- margin-right: 1%;
- }
+ &__title {
+ margin: 0;
+ font-size: 16px;
+ font-weight: 600;
+ color: $gray-900;
+ }
+
+ &__badge {
+ background: $primary-light;
+ color: $primary;
+ font-size: 11px;
+ font-weight: 700;
+ padding: 2px 8px;
+ border-radius: 10px;
+ }
+
+ &__btn {
+ border-radius: 8px !important;
+ font-size: 13px !important;
+ font-weight: 600 !important;
+ height: 36px !important;
+ }
+}
+
+// Empty state
+.addr-empty {
+ text-align: center;
+ padding: 48px 20px;
+ background: $gray-50;
+ border-radius: 10px;
+ border: 1px dashed $gray-200;
+
+ &__icon {
+ font-size: 36px;
+ color: $gray-500;
+ margin-bottom: 10px;
+ }
+
+ &__text {
+ color: $gray-500;
+ font-size: 14px;
+ margin: 0;
+ }
+}
+
+// Expansion panels
+.addr-panel {
+ margin-bottom: 12px !important;
+ border-radius: 10px !important;
+ border: 1px solid $gray-200 !important;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06) !important;
+
+ &::ng-deep .mat-expansion-panel-body {
+ padding: 0 20px 20px !important;
+ }
+
+ &__header {
+ height: auto !important;
+ min-height: 56px !important;
+ padding: 8px 20px !important;
+ }
+
+ &__title {
+ display: flex !important;
+ align-items: center;
+ gap: 10px;
+ flex: 1;
+ }
+
+ &__type-icon {
+ font-size: 16px;
+ color: $primary;
+ width: 28px;
+ height: 28px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: $primary-light;
+ border-radius: 6px;
+ }
+
+ &__type {
+ font-size: 14px;
+ font-weight: 600;
+ color: $gray-900;
+ text-transform: uppercase;
+ letter-spacing: 0.3px;
+ }
+
+ &__status {
+ font-size: 11px;
+ font-weight: 600;
+ padding: 2px 10px;
+ border-radius: 10px;
+
+ &--active {
+ background: $green-light;
+ color: $green;
}
- h3 {
- margin: 1% auto;
+ &--inactive {
+ background: $red-light;
+ color: $red;
}
+ }
- p {
- line-height: 30px;
- margin-left: 2%;
+ &__desc {
+ font-size: 12px;
+ color: $gray-500 !important;
+ flex: 0 !important;
+ white-space: nowrap;
+ }
+}
+
+// Actions bar inside panel
+.addr-actions {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 12px 0;
+ margin-bottom: 12px;
+ border-bottom: 1px solid $gray-100;
+
+ &__edit {
+ border-radius: 6px !important;
+ font-size: 12px !important;
+ font-weight: 600 !important;
+ height: 32px !important;
+ }
+
+ &__toggle {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ }
+
+ &__toggle-label {
+ font-size: 12px;
+ color: $gray-500;
+ font-weight: 500;
+ }
+}
+
+// Address details grid
+.addr-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 0;
+ border: 1px solid $gray-100;
+ border-radius: 8px;
+ overflow: hidden;
+
+ @media (max-width: 768px) {
+ grid-template-columns: repeat(2, 1fr);
+ }
+
+ @media (max-width: 480px) {
+ grid-template-columns: 1fr;
+ }
+}
+
+.addr-field {
+ padding: 10px 14px;
+ border-bottom: 1px solid $gray-100;
+ border-right: 1px solid $gray-100;
+ transition: background 0.15s ease;
+
+ &:hover {
+ background: $gray-50;
+ }
+
+ &:nth-child(3n) {
+ border-right: none;
+ }
+
+ &__label {
+ font-size: 10px;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ color: $gray-500;
+ margin-bottom: 3px;
+ }
+
+ &__value {
+ font-size: 13.5px;
+ font-weight: 500;
+ color: $gray-900;
+ word-break: break-word;
+
+ &--mono {
+ font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;
+ font-size: 13px;
+ letter-spacing: 0.5px;
}
}
}
diff --git a/src/app/clients/clients-view/address-tab/address-tab.component.ts b/src/app/clients/clients-view/address-tab/address-tab.component.ts
index 1dcc4e36b..24e32087c 100644
--- a/src/app/clients/clients-view/address-tab/address-tab.component.ts
+++ b/src/app/clients/clients-view/address-tab/address-tab.component.ts
@@ -94,7 +94,8 @@ export class AddressTabComponent {
this.translateService.instant('labels.catalogs.Client') +
' ' +
this.translateService.instant('labels.heading.Address'),
- formfields: this.getAddressFormFields('add')
+ formfields: this.getAddressFormFields('add'),
+ layout: { columns: 2, columnWidth: 350 }
};
const addAddressDialogRef = this.dialog.open(FormDialogComponent, { data });
addAddressDialogRef.afterClosed().subscribe((response: any) => {
@@ -126,7 +127,7 @@ export class AddressTabComponent {
' ' +
this.translateService.instant('labels.heading.Address'),
formfields: this.getAddressFormFields('edit', address),
- layout: { addButtonText: 'Edit' }
+ layout: { columns: 2, columnWidth: 350, addButtonText: 'Edit' }
};
const editAddressDialogRef = this.dialog.open(FormDialogComponent, { data });
editAddressDialogRef.afterClosed().subscribe((response: any) => {
diff --git a/src/app/clients/clients-view/custom-dialogs/upload-document-dialog/upload-document-dialog.component.html b/src/app/clients/clients-view/custom-dialogs/upload-document-dialog/upload-document-dialog.component.html
index 19d7ae283..b4594a106 100644
--- a/src/app/clients/clients-view/custom-dialogs/upload-document-dialog/upload-document-dialog.component.html
+++ b/src/app/clients/clients-view/custom-dialogs/upload-document-dialog/upload-document-dialog.component.html
@@ -6,99 +6,146 @@
file, You can obtain one at http://mozilla.org/MPL/2.0/.
-->
-