Browse Source

Merge pull request #19326 from abpframework/issue-19324

Adding toastr notifications with new "SuccessfullySaved" localization
pull/19425/head
oykuermann 3 years ago
committed by GitHub
parent
commit
8029addef0
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ar.json
  2. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/cs.json
  3. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json
  4. 7
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/el.json
  5. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en-GB.json
  6. 3
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json
  7. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json
  8. 3
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fa.json
  9. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fi.json
  10. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fr.json
  11. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hi.json
  12. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hr.json
  13. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hu.json
  14. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/is.json
  15. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/it.json
  16. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/nl.json
  17. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pl-PL.json
  18. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pt-BR.json
  19. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ro-RO.json
  20. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ru.json
  21. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sk.json
  22. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sl.json
  23. 3
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json
  24. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/vi.json
  25. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hans.json
  26. 5
      framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json
  27. 31
      npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts
  28. 17
      npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.ts
  29. 21
      npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts
  30. 36
      npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts
  31. 48
      npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts
  32. 23
      npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts
  33. 2
      npm/ng-packs/packages/theme-shared/src/lib/services/create-error-component.service.ts

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ar.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "حفظ...", "SavingWithThreeDot": "حفظ...",
"Actions": "الإجراءات", "Actions": "الإجراءات",
"Delete": "حذف", "Delete": "حذف",
"SuccessfullyDeleted": "تم الحذف بنجاح", "SavedSuccessfully": "تم الحفظ بنجاح",
"DeletedSuccessfully": "تم الحذف بنجاح",
"Edit": "تعديل", "Edit": "تعديل",
"Refresh": "تحديث", "Refresh": "تحديث",
"Language": "لغة", "Language": "لغة",
@ -59,4 +60,4 @@
"Theme": "سمة", "Theme": "سمة",
"NotAssigned": "غيرمعتمد" "NotAssigned": "غيرمعتمد"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/cs.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Ukládám...", "SavingWithThreeDot": "Ukládám...",
"Actions": "Akce", "Actions": "Akce",
"Delete": "Smazat", "Delete": "Smazat",
"SuccessfullyDeleted": "Úspěšně smazáno", "SavedSuccessfully": "Úspěšně uloženo",
"DeletedSuccessfully": "Úspěšně smazáno",
"Edit": "Upravit", "Edit": "Upravit",
"Refresh": "Obnovit", "Refresh": "Obnovit",
"Language": "Jazyk", "Language": "Jazyk",
@ -59,4 +60,4 @@
"Theme": "Téma", "Theme": "Téma",
"NotAssigned": "Nepřiřazena" "NotAssigned": "Nepřiřazena"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Speichern...", "SavingWithThreeDot": "Speichern...",
"Actions": "Aktionen", "Actions": "Aktionen",
"Delete": "Löschen", "Delete": "Löschen",
"SuccessfullyDeleted": "Erfolgreich gelöscht", "SavedSuccessfully": "Erfolgreich gespeichert",
"DeletedSuccessfully": "Erfolgreich gelöscht",
"Edit": "Bearbeiten", "Edit": "Bearbeiten",
"Refresh": "Aktualisieren", "Refresh": "Aktualisieren",
"Language": "Sprache", "Language": "Sprache",
@ -59,4 +60,4 @@
"Theme": "Thema", "Theme": "Thema",
"NotAssigned": "Nicht zugeordnet" "NotAssigned": "Nicht zugeordnet"
} }
} }

7
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/el.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Αποθηκεύεται...", "SavingWithThreeDot": "Αποθηκεύεται...",
"Actions": "Ενέργειες", "Actions": "Ενέργειες",
"Delete": "Διαγραφή", "Delete": "Διαγραφή",
"SuccessfullyDeleted": "Διαγράφηκε με επιτυχία", "SavedSuccessfully": "Αποθηκεύτηκε με επιτυχία",
"DeletedSuccessfully": "Διαγράφηκε με επιτυχία",
"Edit": "Επεξεργασία", "Edit": "Επεξεργασία",
"Refresh": "Ανανέωση", "Refresh": "Ανανέωση",
"Language": "Γλώσσα", "Language": "Γλώσσα",
@ -49,8 +50,8 @@
"ItemWillBeDeletedMessageWithFormat": "Το {0} θα διαγραφεί", "ItemWillBeDeletedMessageWithFormat": "Το {0} θα διαγραφεί",
"ItemWillBeDeletedMessage": "Αυτό το στοιχείο θα διαγραφεί!", "ItemWillBeDeletedMessage": "Αυτό το στοιχείο θα διαγραφεί!",
"ManageYourAccount": "Διαχείριση Λογαριασμού", "ManageYourAccount": "Διαχείριση Λογαριασμού",
"OthersGroup":"άλλος", "OthersGroup": "άλλος",
"Today": "Σήμερα", "Today": "Σήμερα",
"Apply": "Ισχύουν" "Apply": "Ισχύουν"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en-GB.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Saving", "SavingWithThreeDot": "Saving",
"Actions": "Actions", "Actions": "Actions",
"Delete": "Delete", "Delete": "Delete",
"SuccessfullyDeleted": "Successfully deleted", "SavedSuccessfully": "Saved successfully",
"DeletedSuccessfully": "Deleted successfully",
"Edit": "Edit", "Edit": "Edit",
"Refresh": "Refresh", "Refresh": "Refresh",
"Language": "Language", "Language": "Language",
@ -54,4 +55,4 @@
"Today": "Today", "Today": "Today",
"Apply": "Apply" "Apply": "Apply"
} }
} }

3
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Saving...", "SavingWithThreeDot": "Saving...",
"Actions": "Actions", "Actions": "Actions",
"Delete": "Delete", "Delete": "Delete",
"SuccessfullyDeleted": "Successfully deleted", "SavedSuccessfully": "Saved successfully",
"DeletedSuccessfully": "Deleted successfully",
"Edit": "Edit", "Edit": "Edit",
"Refresh": "Refresh", "Refresh": "Refresh",
"Language": "Language", "Language": "Language",

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Guardando...", "SavingWithThreeDot": "Guardando...",
"Actions": "Opciones", "Actions": "Opciones",
"Delete": "Borrar", "Delete": "Borrar",
"SuccessfullyDeleted": "Eliminado con éxito", "SavedSuccessfully": "Guardado con éxito",
"DeletedSuccessfully": "Eliminado con éxito",
"Edit": "Editar", "Edit": "Editar",
"Refresh": "Actualizar", "Refresh": "Actualizar",
"Language": "Idioma", "Language": "Idioma",
@ -59,4 +60,4 @@
"Theme": "Tema", "Theme": "Tema",
"NotAssigned": "No asignado" "NotAssigned": "No asignado"
} }
} }

3
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fa.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "ذخیره...", "SavingWithThreeDot": "ذخیره...",
"Actions": "عملیات", "Actions": "عملیات",
"Delete": "حذف", "Delete": "حذف",
"SuccessfullyDeleted": "با موفقیت حذف شد", "SavedSuccessfully": "با موفقیت ذخیره شد",
"DeletedSuccessfully": "با موفقیت حذف شد",
"Edit": "ویرایش", "Edit": "ویرایش",
"Refresh": "رفرش", "Refresh": "رفرش",
"Language": "زبان", "Language": "زبان",

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fi.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Tallennetaan...", "SavingWithThreeDot": "Tallennetaan...",
"Actions": "Toiminnot", "Actions": "Toiminnot",
"Delete": "Poista", "Delete": "Poista",
"SuccessfullyDeleted": "Poistettu onnistuneesti", "SavedSuccessfully": "Tallennettu onnistuneesti",
"DeletedSuccessfully": "Poistettu onnistuneesti",
"Edit": "Muokkaa", "Edit": "Muokkaa",
"Refresh": "Virkistä", "Refresh": "Virkistä",
"Language": "Kieli", "Language": "Kieli",
@ -59,4 +60,4 @@
"Theme": "Teema", "Theme": "Teema",
"NotAssigned": "Ei määritetty" "NotAssigned": "Ei määritetty"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fr.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Enregistrement...", "SavingWithThreeDot": "Enregistrement...",
"Actions": "Actions", "Actions": "Actions",
"Delete": "Supprimer", "Delete": "Supprimer",
"SuccessfullyDeleted": "Supprimé avec succès", "SavedSuccessfully": "Enregistré avec succès",
"DeletedSuccessfully": "Supprimé avec succès",
"Edit": "Modifier", "Edit": "Modifier",
"Refresh": "Actualiser", "Refresh": "Actualiser",
"Language": "Langue", "Language": "Langue",
@ -59,4 +60,4 @@
"Theme": "Thème", "Theme": "Thème",
"NotAssigned": "Non attribué" "NotAssigned": "Non attribué"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hi.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "सहेजा जा रहा है...", "SavingWithThreeDot": "सहेजा जा रहा है...",
"Actions": "कार्रवाई", "Actions": "कार्रवाई",
"Delete": "हटाएं", "Delete": "हटाएं",
"SuccessfullyDeleted": "सफलतापूर्वक हटा दिया गया", "SavedSuccessfully": "सफलतापूर्वक सहेजा गया",
"DeletedSuccessfully": "सफलतापूर्वक हटा दिया गया",
"Edit": "संपादित करें", "Edit": "संपादित करें",
"Refresh": "ताज़ा करना", "Refresh": "ताज़ा करना",
"Language": "भाषा: हिन्दी", "Language": "भाषा: हिन्दी",
@ -59,4 +60,4 @@
"Theme": "विषय", "Theme": "विषय",
"NotAssigned": "सौंपा नहीं गया है" "NotAssigned": "सौंपा नहीं गया है"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hr.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Spremanje...", "SavingWithThreeDot": "Spremanje...",
"Actions": "Akcije", "Actions": "Akcije",
"Delete": "Izbrisati", "Delete": "Izbrisati",
"SuccessfullyDeleted": "Uspješno izbrisano", "SavedSuccessfully": "Uspešno zabeleženo",
"DeletedSuccessfully": "Uspješno izbrisano",
"Edit": "Uredi", "Edit": "Uredi",
"Refresh": "Osvježi", "Refresh": "Osvježi",
"Language": "Jezik", "Language": "Jezik",
@ -59,4 +60,4 @@
"Theme": "Tema", "Theme": "Tema",
"NotAssigned": "Nije dodijeljeno" "NotAssigned": "Nije dodijeljeno"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hu.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Mentés...", "SavingWithThreeDot": "Mentés...",
"Actions": "Műveletek", "Actions": "Műveletek",
"Delete": "Törlés", "Delete": "Törlés",
"SuccessfullyDeleted": "Sikeresen törölve", "SavedSuccessfully": "Sikeresen mentve",
"DeletedSuccessfully": "Sikeresen törölve",
"Edit": "Szerkesztés", "Edit": "Szerkesztés",
"Refresh": "Frissítés", "Refresh": "Frissítés",
"Language": "Nyelv", "Language": "Nyelv",
@ -59,4 +60,4 @@
"Theme": "Téma", "Theme": "Téma",
"NotAssigned": "Nem kijelölt" "NotAssigned": "Nem kijelölt"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/is.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Er að vista...", "SavingWithThreeDot": "Er að vista...",
"Actions": "Aðgerðir", "Actions": "Aðgerðir",
"Delete": "Eyða", "Delete": "Eyða",
"SuccessfullyDeleted": "Tókst að eyða", "SavedSuccessfully": "Tókst að vista",
"DeletedSuccessfully": "Tókst að eyða",
"Edit": "Breyta", "Edit": "Breyta",
"Refresh": "Endurhlaða", "Refresh": "Endurhlaða",
"Language": "Tungumál", "Language": "Tungumál",
@ -59,4 +60,4 @@
"Theme": "Þema", "Theme": "Þema",
"NotAssigned": "Ekki skráður" "NotAssigned": "Ekki skráður"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/it.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Salvataggio...", "SavingWithThreeDot": "Salvataggio...",
"Actions": "Azioni", "Actions": "Azioni",
"Delete": "Elimina", "Delete": "Elimina",
"SuccessfullyDeleted": "Eliminato con successo", "SavedSuccessfully": "Salvato con successo",
"DeletedSuccessfully": "Eliminato con successo",
"Edit": "Modifica", "Edit": "Modifica",
"Refresh": "Ricarica", "Refresh": "Ricarica",
"Language": "Lingua", "Language": "Lingua",
@ -59,4 +60,4 @@
"Theme": "Tema", "Theme": "Tema",
"NotAssigned": "Non assegnato" "NotAssigned": "Non assegnato"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/nl.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Opslaan...", "SavingWithThreeDot": "Opslaan...",
"Actions": "Acties", "Actions": "Acties",
"Delete": "Verwijder", "Delete": "Verwijder",
"SuccessfullyDeleted": "Succesvol verwijderd", "SavedSuccessfully": "Succesvol opgeslagen",
"DeletedSuccessfully": "Succesvol verwijderd",
"Edit": "Bewerk", "Edit": "Bewerk",
"Refresh": "Ververs", "Refresh": "Ververs",
"Language": "Taal", "Language": "Taal",
@ -59,4 +60,4 @@
"Theme": "Thema", "Theme": "Thema",
"NotAssigned": "Niet toegekend" "NotAssigned": "Niet toegekend"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pl-PL.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Zapisywanie...", "SavingWithThreeDot": "Zapisywanie...",
"Actions": "Akcje", "Actions": "Akcje",
"Delete": "Usuń", "Delete": "Usuń",
"SuccessfullyDeleted": "Pomyślnie usunięto", "SavedSuccessfully": "Pomyślnie zapisano",
"DeletedSuccessfully": "Pomyślnie usunięto",
"Edit": "Edytuj", "Edit": "Edytuj",
"Refresh": "Odśwież", "Refresh": "Odśwież",
"Language": "Język", "Language": "Język",
@ -59,4 +60,4 @@
"Theme": "Temat", "Theme": "Temat",
"NotAssigned": "Nie przypisano" "NotAssigned": "Nie przypisano"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pt-BR.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Salvando...", "SavingWithThreeDot": "Salvando...",
"Actions": "Ações", "Actions": "Ações",
"Delete": "Excluir", "Delete": "Excluir",
"SuccessfullyDeleted": "Excluído com sucesso", "SavedSuccessfully": "Salvo com sucesso",
"DeletedSuccessfully": "Excluído com sucesso",
"Edit": "Editar", "Edit": "Editar",
"Refresh": "Atualizar", "Refresh": "Atualizar",
"Language": "Idioma", "Language": "Idioma",
@ -59,4 +60,4 @@
"Theme": "Tema", "Theme": "Tema",
"NotAssigned": "Não atribuído" "NotAssigned": "Não atribuído"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ro-RO.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Se salvează...", "SavingWithThreeDot": "Se salvează...",
"Actions": "Acţiuni", "Actions": "Acţiuni",
"Delete": "Şterge", "Delete": "Şterge",
"SuccessfullyDeleted": "Șters cu succes", "SavedSuccessfully": "Salvat cu succes",
"DeletedSuccessfully": "Șters cu succes",
"Edit": "Editează", "Edit": "Editează",
"Refresh": "Reîncarcă", "Refresh": "Reîncarcă",
"Language": "Limba", "Language": "Limba",
@ -59,4 +60,4 @@
"Theme": "Temă", "Theme": "Temă",
"NotAssigned": "Nealocat" "NotAssigned": "Nealocat"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ru.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Сохранение...", "SavingWithThreeDot": "Сохранение...",
"Actions": "Действия", "Actions": "Действия",
"Delete": "Удалить", "Delete": "Удалить",
"SuccessfullyDeleted": "Успешно удалено", "SavedSuccessfully": "Успешно сохранено",
"DeletedSuccessfully": "Успешно удалено",
"Edit": "Редактировать", "Edit": "Редактировать",
"Refresh": "Обновить", "Refresh": "Обновить",
"Language": "Язык", "Language": "Язык",
@ -59,4 +60,4 @@
"Theme": "Тема", "Theme": "Тема",
"NotAssigned": "Не назначен" "NotAssigned": "Не назначен"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sk.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Úkladanie...", "SavingWithThreeDot": "Úkladanie...",
"Actions": "Akcie", "Actions": "Akcie",
"Delete": "Odstrániť", "Delete": "Odstrániť",
"SuccessfullyDeleted": "Úspešne odstránené", "SavedSuccessfully": "Úspešne uložené",
"DeletedSuccessfully": "Úspešne odstránené",
"Edit": "Upraviť", "Edit": "Upraviť",
"Refresh": "Obnoviť", "Refresh": "Obnoviť",
"Language": "Jazyk", "Language": "Jazyk",
@ -59,4 +60,4 @@
"Theme": "Téma", "Theme": "Téma",
"NotAssigned": "Nepridelené" "NotAssigned": "Nepridelené"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sl.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Shranjujem...", "SavingWithThreeDot": "Shranjujem...",
"Actions": "Dejanja", "Actions": "Dejanja",
"Delete": "Izbriši", "Delete": "Izbriši",
"SuccessfullyDeleted": "Uspešno izbrisano", "SavedSuccessfully": "Uspešno shranjeno",
"DeletedSuccessfully": "Uspešno izbrisano",
"Edit": "Uredi", "Edit": "Uredi",
"Refresh": "Osveži", "Refresh": "Osveži",
"Language": "Jezik", "Language": "Jezik",
@ -59,4 +60,4 @@
"Theme": "Tema", "Theme": "Tema",
"NotAssigned": "Ni dodeljena" "NotAssigned": "Ni dodeljena"
} }
} }

3
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Kaydediliyor...", "SavingWithThreeDot": "Kaydediliyor...",
"Actions": "İşlemler", "Actions": "İşlemler",
"Delete": "Sil", "Delete": "Sil",
"SuccessfullyDeleted": "Başarıyla silindi", "SavedSuccessfully": "Başarıyla kaydedildi",
"DeletedSuccessfully": "Başarıyla silindi",
"Edit": "Düzenle", "Edit": "Düzenle",
"Refresh": "Yenile", "Refresh": "Yenile",
"Language": "Dil", "Language": "Dil",

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/vi.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "Đang lưu...", "SavingWithThreeDot": "Đang lưu...",
"Actions": "Hành động", "Actions": "Hành động",
"Delete": "Xóa", "Delete": "Xóa",
"SuccessfullyDeleted": "Đã xóa thành công", "SavedSuccessfully": "Đã lưu thành công",
"DeletedSuccessfully": "Đã xóa thành công",
"Edit": "Sửa", "Edit": "Sửa",
"Refresh": "Làm mới", "Refresh": "Làm mới",
"Language": "Ngôn ngữ", "Language": "Ngôn ngữ",
@ -59,4 +60,4 @@
"Theme": "chủ đề", "Theme": "chủ đề",
"NotAssigned": "Không được chỉ định" "NotAssigned": "Không được chỉ định"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hans.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "保存中...", "SavingWithThreeDot": "保存中...",
"Actions": "操作", "Actions": "操作",
"Delete": "删除", "Delete": "删除",
"SuccessfullyDeleted": "删除成功", "SavedSuccessfully": "保存成功",
"DeletedSuccessfully": "删除成功",
"Edit": "编辑", "Edit": "编辑",
"Refresh": "刷新", "Refresh": "刷新",
"Language": "语言", "Language": "语言",
@ -59,4 +60,4 @@
"Theme": "主题", "Theme": "主题",
"NotAssigned": "未分配" "NotAssigned": "未分配"
} }
} }

5
framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json

@ -13,7 +13,8 @@
"SavingWithThreeDot": "保存中...", "SavingWithThreeDot": "保存中...",
"Actions": "操作", "Actions": "操作",
"Delete": "刪除", "Delete": "刪除",
"SuccessfullyDeleted": "刪除成功", "SavedSuccessfully": "保存成功",
"DeletedSuccessfully": "刪除成功",
"Edit": "修改", "Edit": "修改",
"Refresh": "更新", "Refresh": "更新",
"Language": "語言", "Language": "語言",
@ -59,4 +60,4 @@
"Theme": "主題", "Theme": "主題",
"NotAssigned": "未分配" "NotAssigned": "未分配"
} }
} }

31
npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts

@ -1,6 +1,6 @@
import { ProfileDto, ProfileService } from '@abp/ng.account.core/proxy'; import { ProfileDto, ProfileService } from '@abp/ng.account.core/proxy';
import { Confirmation, ConfirmationService, ToasterService } from '@abp/ng.theme.shared'; import { Confirmation, ConfirmationService, ToasterService } from '@abp/ng.theme.shared';
import { Component, Inject, Injector, OnInit, ViewEncapsulation } from '@angular/core'; import { Component, inject, Injector, OnInit } from '@angular/core';
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
import { finalize, filter } from 'rxjs/operators'; import { finalize, filter } from 'rxjs/operators';
import { Account } from '../../models/account'; import { Account } from '../../models/account';
@ -31,25 +31,24 @@ export class PersonalSettingsComponent
Account.PersonalSettingsComponentInputs, Account.PersonalSettingsComponentInputs,
Account.PersonalSettingsComponentOutputs Account.PersonalSettingsComponentOutputs
{ {
private readonly fb = inject(UntypedFormBuilder);
protected readonly toasterService = inject(ToasterService);
protected readonly profileService = inject(ProfileService);
protected readonly manageProfileState = inject(ManageProfileStateService);
protected readonly authService = inject(AuthService);
protected readonly confirmationService = inject(ConfirmationService);
protected readonly configState = inject(ConfigStateService);
protected readonly isPersonalSettingsChangedConfirmationActive = inject(
RE_LOGIN_CONFIRMATION_TOKEN,
);
private readonly injector = inject(Injector);
selected?: ProfileDto; selected?: ProfileDto;
form!: UntypedFormGroup; form!: UntypedFormGroup;
inProgress?: boolean; inProgress?: boolean;
constructor(
private fb: UntypedFormBuilder,
private toasterService: ToasterService,
private profileService: ProfileService,
private manageProfileState: ManageProfileStateService,
private readonly authService: AuthService,
private confirmationService: ConfirmationService,
private configState: ConfigStateService,
@Inject(RE_LOGIN_CONFIRMATION_TOKEN)
private isPersonalSettingsChangedConfirmationActive: boolean,
protected injector: Injector,
) {}
buildForm() { buildForm() {
this.selected = this.manageProfileState.getProfile(); this.selected = this.manageProfileState.getProfile();
if (!this.selected) { if (!this.selected) {
@ -76,10 +75,10 @@ export class PersonalSettingsComponent
this.configState.refreshAppState(); this.configState.refreshAppState();
this.toasterService.success('AbpAccount::PersonalSettingsSaved', 'Success', { life: 5000 }); this.toasterService.success('AbpAccount::PersonalSettingsSaved', 'Success', { life: 5000 });
if(isRefreshTokenExists){ if (isRefreshTokenExists) {
return this.authService.refreshToken(); return this.authService.refreshToken();
} }
if (isLogOutConfirmMessageVisible) { if (isLogOutConfirmMessageVisible) {
this.showLogoutConfirmMessage(); this.showLogoutConfirmMessage();
} }

17
npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.ts

@ -11,7 +11,7 @@ import {
LocaleDirection, LocaleDirection,
ToasterService, ToasterService,
} from '@abp/ng.theme.shared'; } from '@abp/ng.theme.shared';
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { Component, EventEmitter, Input, Output, inject } from '@angular/core';
import { finalize } from 'rxjs/operators'; import { finalize } from 'rxjs/operators';
import { FeatureManagement } from '../../models/feature-management'; import { FeatureManagement } from '../../models/feature-management';
@ -31,6 +31,12 @@ export class FeatureManagementComponent
FeatureManagement.FeatureManagementComponentInputs, FeatureManagement.FeatureManagementComponentInputs,
FeatureManagement.FeatureManagementComponentOutputs FeatureManagement.FeatureManagementComponentOutputs
{ {
protected readonly track = inject(TrackByService);
protected readonly toasterService = inject(ToasterService);
protected readonly service = inject(FeaturesService);
protected readonly configState = inject(ConfigStateService);
protected readonly confirmationService = inject(ConfirmationService);
@Input() @Input()
providerKey: string; providerKey: string;
@ -72,14 +78,6 @@ export class FeatureManagementComponent
modalBusy = false; modalBusy = false;
constructor(
public readonly track: TrackByService,
private toasterService: ToasterService,
protected service: FeaturesService,
protected configState: ConfigStateService,
protected confirmationService: ConfirmationService,
) {}
openModal() { openModal() {
if (!this.providerName) { if (!this.providerName) {
throw new Error('providerName is required.'); throw new Error('providerName is required.');
@ -127,6 +125,7 @@ export class FeatureManagementComponent
.subscribe(() => { .subscribe(() => {
this.visible = false; this.visible = false;
this.toasterService.success('AbpFeatureManagement::Saved');
if (!this.providerKey) { if (!this.providerKey) {
// to refresh host's features // to refresh host's features
this.configState.refreshAppState().subscribe(); this.configState.refreshAppState().subscribe();

21
npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts

@ -1,13 +1,13 @@
import { ListService, PagedAndSortedResultRequestDto, PagedResultDto } from '@abp/ng.core'; import { ListService, PagedAndSortedResultRequestDto, PagedResultDto } from '@abp/ng.core';
import { IdentityRoleDto, IdentityRoleService } from '@abp/ng.identity/proxy'; import { IdentityRoleDto, IdentityRoleService } from '@abp/ng.identity/proxy';
import { ePermissionManagementComponents } from '@abp/ng.permission-management'; import { ePermissionManagementComponents } from '@abp/ng.permission-management';
import {Confirmation, ConfirmationService, ToasterService} from '@abp/ng.theme.shared'; import { Confirmation, ConfirmationService, ToasterService } from '@abp/ng.theme.shared';
import { import {
EXTENSIONS_IDENTIFIER, EXTENSIONS_IDENTIFIER,
FormPropData, FormPropData,
generateFormFromProps, generateFormFromProps,
} from '@abp/ng.components/extensible'; } from '@abp/ng.components/extensible';
import { Component, Injector, OnInit } from '@angular/core'; import { Component, inject, Injector, OnInit } from '@angular/core';
import { UntypedFormGroup } from '@angular/forms'; import { UntypedFormGroup } from '@angular/forms';
import { finalize } from 'rxjs/operators'; import { finalize } from 'rxjs/operators';
import { eIdentityComponents } from '../../enums/components'; import { eIdentityComponents } from '../../enums/components';
@ -24,6 +24,12 @@ import { eIdentityComponents } from '../../enums/components';
], ],
}) })
export class RolesComponent implements OnInit { export class RolesComponent implements OnInit {
protected readonly list = inject(ListService<PagedAndSortedResultRequestDto>);
protected readonly confirmationService = inject(ConfirmationService);
protected readonly toasterService = inject(ToasterService);
private readonly injector = inject(Injector);
protected readonly service = inject(IdentityRoleService);
data: PagedResultDto<IdentityRoleDto> = { items: [], totalCount: 0 }; data: PagedResultDto<IdentityRoleDto> = { items: [], totalCount: 0 };
form!: UntypedFormGroup; form!: UntypedFormGroup;
@ -44,14 +50,6 @@ export class RolesComponent implements OnInit {
this.visiblePermissions = event; this.visiblePermissions = event;
}; };
constructor(
public readonly list: ListService<PagedAndSortedResultRequestDto>,
protected confirmationService: ConfirmationService,
private toasterService: ToasterService,
protected injector: Injector,
protected service: IdentityRoleService,
) {}
ngOnInit() { ngOnInit() {
this.hookToQuery(); this.hookToQuery();
} }
@ -90,6 +88,7 @@ export class RolesComponent implements OnInit {
.pipe(finalize(() => (this.modalBusy = false))) .pipe(finalize(() => (this.modalBusy = false)))
.subscribe(() => { .subscribe(() => {
this.isModalVisible = false; this.isModalVisible = false;
this.toasterService.success('AbpUi::SavedSuccessfully');
this.list.get(); this.list.get();
}); });
} }
@ -101,7 +100,7 @@ export class RolesComponent implements OnInit {
}) })
.subscribe((status: Confirmation.Status) => { .subscribe((status: Confirmation.Status) => {
if (status === Confirmation.Status.confirm) { if (status === Confirmation.Status.confirm) {
this.toasterService.success('AbpUi::SuccessfullyDeleted'); this.toasterService.success('AbpUi::DeletedSuccessfully');
this.service.delete(id).subscribe(() => this.list.get()); this.service.delete(id).subscribe(() => this.list.get());
} }
}); });

36
npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts

@ -6,7 +6,12 @@ import {
IdentityUserService, IdentityUserService,
} from '@abp/ng.identity/proxy'; } from '@abp/ng.identity/proxy';
import { ePermissionManagementComponents } from '@abp/ng.permission-management'; import { ePermissionManagementComponents } from '@abp/ng.permission-management';
import {Confirmation, ConfirmationService, eFormComponets, ToasterService} from '@abp/ng.theme.shared'; import {
Confirmation,
ConfirmationService,
eFormComponets,
ToasterService,
} from '@abp/ng.theme.shared';
import { import {
EXTENSIONS_IDENTIFIER, EXTENSIONS_IDENTIFIER,
FormPropData, FormPropData,
@ -14,13 +19,19 @@ import {
} from '@abp/ng.components/extensible'; } from '@abp/ng.components/extensible';
import { import {
Component, Component,
inject,
Injector, Injector,
OnInit, OnInit,
TemplateRef, TemplateRef,
TrackByFunction, TrackByFunction,
ViewChild, ViewChild,
} from '@angular/core'; } from '@angular/core';
import { AbstractControl, UntypedFormArray, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import {
AbstractControl,
UntypedFormArray,
UntypedFormBuilder,
UntypedFormGroup,
} from '@angular/forms';
import { finalize, switchMap, tap } from 'rxjs/operators'; import { finalize, switchMap, tap } from 'rxjs/operators';
import { eIdentityComponents } from '../../enums/components'; import { eIdentityComponents } from '../../enums/components';
@ -36,6 +47,13 @@ import { eIdentityComponents } from '../../enums/components';
], ],
}) })
export class UsersComponent implements OnInit { export class UsersComponent implements OnInit {
protected readonly list = inject(ListService<GetIdentityUsersInput>);
protected readonly confirmationService = inject(ConfirmationService);
protected readonly service = inject(IdentityUserService);
protected readonly toasterService = inject(ToasterService);
private readonly fb = inject(UntypedFormBuilder);
private readonly injector = inject(Injector);
data: PagedResultDto<IdentityUserDto> = { items: [], totalCount: 0 }; data: PagedResultDto<IdentityUserDto> = { items: [], totalCount: 0 };
@ViewChild('modalContent', { static: false }) @ViewChild('modalContent', { static: false })
@ -61,7 +79,7 @@ export class UsersComponent implements OnInit {
entityDisplayName: string; entityDisplayName: string;
inputKey=eFormComponets.FormCheckboxComponent inputKey = eFormComponets.FormCheckboxComponent;
trackByFn: TrackByFunction<AbstractControl> = (index, item) => Object.keys(item)[0] || index; trackByFn: TrackByFunction<AbstractControl> = (index, item) => Object.keys(item)[0] || index;
@ -73,15 +91,6 @@ export class UsersComponent implements OnInit {
return ((this.form.get('roleNames') as UntypedFormArray)?.controls as UntypedFormGroup[]) || []; return ((this.form.get('roleNames') as UntypedFormArray)?.controls as UntypedFormGroup[]) || [];
} }
constructor(
public readonly list: ListService<GetIdentityUsersInput>,
protected confirmationService: ConfirmationService,
protected service: IdentityUserService,
private toasterService: ToasterService,
protected fb: UntypedFormBuilder,
protected injector: Injector,
) {}
ngOnInit() { ngOnInit() {
this.hookToQuery(); this.hookToQuery();
} }
@ -158,6 +167,7 @@ export class UsersComponent implements OnInit {
.pipe(finalize(() => (this.modalBusy = false))) .pipe(finalize(() => (this.modalBusy = false)))
.subscribe(() => { .subscribe(() => {
this.isModalVisible = false; this.isModalVisible = false;
this.toasterService.success('AbpUi::SavedSuccessfully');
this.list.get(); this.list.get();
}); });
} }
@ -170,7 +180,7 @@ export class UsersComponent implements OnInit {
.subscribe((status: Confirmation.Status) => { .subscribe((status: Confirmation.Status) => {
if (status === Confirmation.Status.confirm) { if (status === Confirmation.Status.confirm) {
this.service.delete(id).subscribe(() => { this.service.delete(id).subscribe(() => {
this.toasterService.success('AbpUi::SuccessfullyDeleted'); this.toasterService.success('AbpUi::DeletedSuccessfully');
this.list.get(); this.list.get();
}); });
} }

48
npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts

@ -7,11 +7,12 @@ import {
ProviderInfoDto, ProviderInfoDto,
UpdatePermissionDto, UpdatePermissionDto,
} from '@abp/ng.permission-management/proxy'; } from '@abp/ng.permission-management/proxy';
import { LocaleDirection } from '@abp/ng.theme.shared'; import { LocaleDirection, ToasterService } from '@abp/ng.theme.shared';
import { import {
Component, Component,
ElementRef, ElementRef,
EventEmitter, EventEmitter,
inject,
Input, Input,
Output, Output,
QueryList, QueryList,
@ -41,16 +42,21 @@ type PermissionWithGroupName = PermissionGrantInfoDto & {
overflow-y: scroll; overflow-y: scroll;
} }
.scroll-in-modal { .scroll-in-modal {
overflow:auto; overflow: auto;
max-height: calc(100vh - 15rem) max-height: calc(100vh - 15rem);
} }
`, `,
], ],
}) })
export class PermissionManagementComponent export class PermissionManagementComponent
implements implements
PermissionManagement.PermissionManagementComponentInputs, PermissionManagement.PermissionManagementComponentInputs,
PermissionManagement.PermissionManagementComponentOutputs { PermissionManagement.PermissionManagementComponentOutputs
{
protected readonly service = inject(PermissionsService);
protected readonly configState = inject(ConfigStateService);
protected readonly toasterService = inject(ToasterService);
@Input() @Input()
readonly providerName!: string; readonly providerName!: string;
@ -117,8 +123,6 @@ export class PermissionManagementComponent
trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name; trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;
constructor(protected service: PermissionsService, protected configState: ConfigStateService) { }
getChecked(name: string) { getChecked(name: string) {
return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted; return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;
} }
@ -130,19 +134,20 @@ export class PermissionManagementComponent
return; return;
} }
const margin = `margin-${(document.body.dir as LocaleDirection) === 'rtl' ? 'right' : 'left' const margin = `margin-${
}.px`; (document.body.dir as LocaleDirection) === 'rtl' ? 'right' : 'left'
}.px`;
const permissions = const permissions =
(this.data.groups.find(group => group.name === this.selectedGroup?.name) || {}).permissions || (this.data.groups.find(group => group.name === this.selectedGroup?.name) || {}).permissions ||
[]; [];
this.selectedGroupPermissions = permissions.map( this.selectedGroupPermissions = permissions.map(
permission => permission =>
({ ({
...permission, ...permission,
style: { [margin]: findMargin(permissions, permission) }, style: { [margin]: findMargin(permissions, permission) },
isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted, isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted,
} as unknown as PermissionWithStyle), }) as unknown as PermissionWithStyle,
); );
} }
@ -199,19 +204,19 @@ export class PermissionManagementComponent
if (per.name === clickedPermissions.parentName) { if (per.name === clickedPermissions.parentName) {
parentPermission = per; parentPermission = per;
} }
}) });
this.permissions.forEach(per => { this.permissions.forEach(per => {
if (parentPermission.name === per.parentName) { if (parentPermission.name === per.parentName) {
per.isGranted && childPermissionGrantedCount++; per.isGranted && childPermissionGrantedCount++;
} }
}) });
if (childPermissionGrantedCount === 1 && !parentPermission.isGranted) { if (childPermissionGrantedCount === 1 && !parentPermission.isGranted) {
this.permissions = this.permissions.map(per => { this.permissions = this.permissions.map(per => {
if (per.name === parentPermission.name) { if (per.name === parentPermission.name) {
per.isGranted = true; per.isGranted = true;
} }
return per; return per;
}) });
} }
return; return;
} }
@ -220,16 +225,16 @@ export class PermissionManagementComponent
per.isGranted = false; per.isGranted = false;
} }
return per; return per;
}) });
} }
updateSelectedGroupPermissions(clickedPermissions: PermissionGrantInfoDto) { updateSelectedGroupPermissions(clickedPermissions: PermissionGrantInfoDto) {
this.selectedGroupPermissions = this.selectedGroupPermissions.map(per => { this.selectedGroupPermissions = this.selectedGroupPermissions.map(per => {
if (per.name === clickedPermissions.name) { if (per.name === clickedPermissions.name) {
per.isGranted = !per.isGranted per.isGranted = !per.isGranted;
} }
return per; return per;
}) });
} }
setTabCheckboxState() { setTabCheckboxState() {
@ -310,7 +315,7 @@ export class PermissionManagementComponent
const changedPermissions: UpdatePermissionDto[] = this.permissions const changedPermissions: UpdatePermissionDto[] = this.permissions
.filter(per => .filter(per =>
(unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted === (unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted ===
per.isGranted per.isGranted
? false ? false
: true, : true,
) )
@ -332,6 +337,7 @@ export class PermissionManagementComponent
) )
.subscribe(() => { .subscribe(() => {
this.visible = false; this.visible = false;
this.toasterService.success('AbpUi::SavedSuccessfully');
}); });
} }

23
npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts

@ -1,13 +1,13 @@
import { ListService, PagedResultDto } from '@abp/ng.core'; import { ListService, PagedResultDto } from '@abp/ng.core';
import { eFeatureManagementComponents } from '@abp/ng.feature-management'; import { eFeatureManagementComponents } from '@abp/ng.feature-management';
import { GetTenantsInput, TenantDto, TenantService } from '@abp/ng.tenant-management/proxy'; import { GetTenantsInput, TenantDto, TenantService } from '@abp/ng.tenant-management/proxy';
import {Confirmation, ConfirmationService, ToasterService} from '@abp/ng.theme.shared'; import { Confirmation, ConfirmationService, ToasterService } from '@abp/ng.theme.shared';
import { import {
EXTENSIONS_IDENTIFIER, EXTENSIONS_IDENTIFIER,
FormPropData, FormPropData,
generateFormFromProps, generateFormFromProps,
} from '@abp/ng.components/extensible'; } from '@abp/ng.components/extensible';
import { Component, Injector, OnInit } from '@angular/core'; import { Component, inject, Injector, OnInit } from '@angular/core';
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
import { finalize } from 'rxjs/operators'; import { finalize } from 'rxjs/operators';
import { eTenantManagementComponents } from '../../enums/components'; import { eTenantManagementComponents } from '../../enums/components';
@ -24,6 +24,13 @@ import { eTenantManagementComponents } from '../../enums/components';
], ],
}) })
export class TenantsComponent implements OnInit { export class TenantsComponent implements OnInit {
protected readonly list = inject(ListService<GetTenantsInput>);
protected readonly confirmationService = inject(ConfirmationService);
protected readonly service = inject(TenantService);
protected readonly toasterService = inject(ToasterService);
private readonly fb = inject(UntypedFormBuilder);
private readonly injector = inject(Injector);
data: PagedResultDto<TenantDto> = { items: [], totalCount: 0 }; data: PagedResultDto<TenantDto> = { items: [], totalCount: 0 };
selected!: TenantDto; selected!: TenantDto;
@ -48,15 +55,6 @@ export class TenantsComponent implements OnInit {
this.visibleFeatures = value; this.visibleFeatures = value;
}; };
constructor(
public readonly list: ListService<GetTenantsInput>,
private injector: Injector,
private confirmationService: ConfirmationService,
private service: TenantService,
private toasterService: ToasterService,
private fb: UntypedFormBuilder,
) {}
ngOnInit() { ngOnInit() {
this.hookToQuery(); this.hookToQuery();
} }
@ -93,6 +91,7 @@ export class TenantsComponent implements OnInit {
.pipe(finalize(() => (this.modalBusy = false))) .pipe(finalize(() => (this.modalBusy = false)))
.subscribe(() => { .subscribe(() => {
this.isModalVisible = false; this.isModalVisible = false;
this.toasterService.success('AbpUi::SavedSuccessfully');
this.list.get(); this.list.get();
}); });
} }
@ -108,7 +107,7 @@ export class TenantsComponent implements OnInit {
) )
.subscribe((status: Confirmation.Status) => { .subscribe((status: Confirmation.Status) => {
if (status === Confirmation.Status.confirm) { if (status === Confirmation.Status.confirm) {
this.toasterService.success('AbpUi::SuccessfullyDeleted'); this.toasterService.success('AbpUi::DeletedSuccessfully');
this.service.delete(id).subscribe(() => this.list.get()); this.service.delete(id).subscribe(() => this.list.get());
} }
}); });

2
npm/ng-packs/packages/theme-shared/src/lib/services/create-error-component.service.ts

@ -23,7 +23,7 @@ export class CreateErrorComponentService {
protected readonly rendererFactory = inject(RendererFactory2); protected readonly rendererFactory = inject(RendererFactory2);
protected readonly cfRes = inject(ComponentFactoryResolver); protected readonly cfRes = inject(ComponentFactoryResolver);
protected readonly routerEvents = inject(RouterEvents); protected readonly routerEvents = inject(RouterEvents);
protected readonly injector = inject(Injector); private readonly injector = inject(Injector);
protected readonly httpErrorConfig = inject(HTTP_ERROR_CONFIG); protected readonly httpErrorConfig = inject(HTTP_ERROR_CONFIG);
componentRef: ComponentRef<HttpErrorWrapperComponent> | null = null; componentRef: ComponentRef<HttpErrorWrapperComponent> | null = null;

Loading…
Cancel
Save