diff --git a/.editorconfig b/.editorconfig index f91d7643c..70c7a9868 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,152 +1,22 @@ -root = true - -# All files [*] -indent_style = space - -# Xml files -[*.xml] -indent_size = 2 - -# C# files -[*.cs] - -#### Core EditorConfig Options #### - -# Indentation and spacing -indent_size = 4 -tab_width = 4 - -# New line preferences +charset = utf-8-bom end_of_line = crlf +trim_trailing_whitespace = false insert_final_newline = false +indent_style = space +indent_size = 4 -#### .NET Coding Conventions #### -[*.{cs,vb}] - -# Organize usings -dotnet_separate_import_directive_groups = false -dotnet_sort_system_directives_first = true -file_header_template = unset - -# this. and Me. preferences -dotnet_style_qualification_for_event = false:silent -dotnet_style_qualification_for_field = false:silent -dotnet_style_qualification_for_method = false:silent -dotnet_style_qualification_for_property = false:silent - -# Language keywords vs BCL types preferences -dotnet_style_predefined_type_for_locals_parameters_members = true:silent -dotnet_style_predefined_type_for_member_access = true:silent - -# Parentheses preferences -dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent -dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent -dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent -dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent - -# Modifier preferences -dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent - -# Expression-level preferences -dotnet_style_coalesce_expression = true:suggestion -dotnet_style_collection_initializer = true:suggestion -dotnet_style_explicit_tuple_names = true:suggestion -dotnet_style_null_propagation = true:suggestion -dotnet_style_object_initializer = true:suggestion -dotnet_style_operator_placement_when_wrapping = beginning_of_line -dotnet_style_prefer_auto_properties = true:suggestion -dotnet_style_prefer_compound_assignment = true:suggestion -dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion -dotnet_style_prefer_conditional_expression_over_return = true:suggestion -dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion -dotnet_style_prefer_inferred_tuple_names = true:suggestion -dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion -dotnet_style_prefer_simplified_boolean_expressions = true:suggestion -dotnet_style_prefer_simplified_interpolation = true:suggestion - -# Field preferences -dotnet_style_readonly_field = true:warning - -# Parameter preferences -dotnet_code_quality_unused_parameters = all:suggestion - -# Suppression preferences -dotnet_remove_unnecessary_suppression_exclusions = none - -#### C# Coding Conventions #### -[*.cs] - -# var preferences -csharp_style_var_elsewhere = false:silent -csharp_style_var_for_built_in_types = false:silent -csharp_style_var_when_type_is_apparent = false:silent - -# Expression-bodied members -csharp_style_expression_bodied_accessors = true:silent -csharp_style_expression_bodied_constructors = false:silent -csharp_style_expression_bodied_indexers = true:silent -csharp_style_expression_bodied_lambdas = true:suggestion -csharp_style_expression_bodied_local_functions = false:silent -csharp_style_expression_bodied_methods = false:silent -csharp_style_expression_bodied_operators = false:silent -csharp_style_expression_bodied_properties = true:silent - -# Pattern matching preferences -csharp_style_pattern_matching_over_as_with_null_check = true:suggestion -csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion -csharp_style_prefer_not_pattern = true:suggestion -csharp_style_prefer_pattern_matching = true:silent -csharp_style_prefer_switch_expression = true:suggestion - -# Null-checking preferences -csharp_style_conditional_delegate_call = true:suggestion - -# Modifier preferences -csharp_prefer_static_local_function = true:warning -csharp_preferred_modifier_order = public, private, protected, internal, static, extern, new, virtual, abstract, sealed, override, readonly, unsafe, volatile, async:silent - -# Code-block preferences -csharp_prefer_braces = true:silent -csharp_prefer_simple_using_statement = true:suggestion - -# Expression-level preferences -csharp_prefer_simple_default_expression = true:suggestion -csharp_style_deconstructed_variable_declaration = true:suggestion -csharp_style_inlined_variable_declaration = true:suggestion -csharp_style_pattern_local_over_anonymous_function = true:suggestion -csharp_style_prefer_index_operator = true:suggestion -csharp_style_prefer_range_operator = true:suggestion -csharp_style_throw_expression = true:suggestion -csharp_style_unused_value_assignment_preference = discard_variable:suggestion -csharp_style_unused_value_expression_statement_preference = discard_variable:silent - -# 'using' directive preferences -csharp_using_directive_placement = outside_namespace:silent - -#### C# Formatting Rules #### - -# Namespace preferences -csharp_style_namespace_declarations = file_scoped:warning - -# New line preferences +# Microsoft .NET properties +csharp_indent_braces = false +csharp_indent_switch_labels = true csharp_new_line_before_catch = true csharp_new_line_before_else = true csharp_new_line_before_finally = true -csharp_new_line_before_members_in_anonymous_types = true -csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_object_initializers = false csharp_new_line_before_open_brace = all csharp_new_line_between_query_expression_clauses = true - -# Indentation preferences -csharp_indent_block_contents = true -csharp_indent_braces = false -csharp_indent_case_contents = true -csharp_indent_case_contents_when_block = true -csharp_indent_labels = one_less_than_current -csharp_indent_switch_labels = true - -# Space preferences +csharp_preferred_modifier_order = public, private, protected, internal, file, new, static, abstract, virtual, sealed, readonly, override, extern, unsafe, volatile, async, required:suggestion +csharp_preserve_single_line_blocks = true csharp_space_after_cast = false csharp_space_after_colon_in_inheritance_clause = true csharp_space_after_comma = true @@ -154,7 +24,6 @@ csharp_space_after_dot = false csharp_space_after_keywords_in_control_flow_statements = true csharp_space_after_semicolon_in_for_statement = true csharp_space_around_binary_operators = before_and_after -csharp_space_around_declaration_statements = false csharp_space_before_colon_in_inheritance_clause = true csharp_space_before_comma = false csharp_space_before_dot = false @@ -169,194 +38,3718 @@ csharp_space_between_method_declaration_name_and_open_parenthesis = false csharp_space_between_method_declaration_parameter_list_parentheses = false csharp_space_between_parentheses = false csharp_space_between_square_brackets = false +csharp_style_namespace_declarations = file_scoped:suggestion +csharp_style_prefer_utf8_string_literals = true:suggestion +csharp_style_var_elsewhere = true:suggestion +csharp_style_var_for_built_in_types = true:suggestion +csharp_style_var_when_type_is_apparent = true:suggestion +csharp_using_directive_placement = outside_namespace:silent +dotnet_diagnostic.bc40000.severity = warning +dotnet_diagnostic.bc400005.severity = warning +dotnet_diagnostic.bc40008.severity = warning +dotnet_diagnostic.bc40056.severity = warning +dotnet_diagnostic.bc42016.severity = warning +dotnet_diagnostic.bc42024.severity = warning +dotnet_diagnostic.bc42025.severity = warning +dotnet_diagnostic.bc42104.severity = warning +dotnet_diagnostic.bc42105.severity = warning +dotnet_diagnostic.bc42106.severity = warning +dotnet_diagnostic.bc42107.severity = warning +dotnet_diagnostic.bc42304.severity = warning +dotnet_diagnostic.bc42309.severity = warning +dotnet_diagnostic.bc42322.severity = warning +dotnet_diagnostic.bc42349.severity = warning +dotnet_diagnostic.bc42353.severity = warning +dotnet_diagnostic.bc42354.severity = warning +dotnet_diagnostic.bc42355.severity = warning +dotnet_diagnostic.bc42356.severity = warning +dotnet_diagnostic.bc42358.severity = warning +dotnet_diagnostic.bc42504.severity = warning +dotnet_diagnostic.bc42505.severity = warning +dotnet_diagnostic.ca2252.severity = error +dotnet_diagnostic.cs0067.severity = warning +dotnet_diagnostic.cs0078.severity = warning +dotnet_diagnostic.cs0108.severity = warning +dotnet_diagnostic.cs0109.severity = warning +dotnet_diagnostic.cs0114.severity = warning +dotnet_diagnostic.cs0162.severity = warning +dotnet_diagnostic.cs0164.severity = warning +dotnet_diagnostic.cs0168.severity = warning +dotnet_diagnostic.cs0169.severity = warning +dotnet_diagnostic.cs0183.severity = warning +dotnet_diagnostic.cs0184.severity = warning +dotnet_diagnostic.cs0197.severity = warning +dotnet_diagnostic.cs0219.severity = warning +dotnet_diagnostic.cs0252.severity = warning +dotnet_diagnostic.cs0253.severity = warning +dotnet_diagnostic.cs0282.severity = warning +dotnet_diagnostic.cs0414.severity = warning +dotnet_diagnostic.cs0420.severity = warning +dotnet_diagnostic.cs0458.severity = warning +dotnet_diagnostic.cs0464.severity = warning +dotnet_diagnostic.cs0465.severity = warning +dotnet_diagnostic.cs0469.severity = warning +dotnet_diagnostic.cs0472.severity = warning +dotnet_diagnostic.cs0612.severity = warning +dotnet_diagnostic.cs0618.severity = warning +dotnet_diagnostic.cs0628.severity = warning +dotnet_diagnostic.cs0642.severity = warning +dotnet_diagnostic.cs0649.severity = warning +dotnet_diagnostic.cs0652.severity = warning +dotnet_diagnostic.cs0657.severity = warning +dotnet_diagnostic.cs0658.severity = warning +dotnet_diagnostic.cs0659.severity = warning +dotnet_diagnostic.cs0660.severity = warning +dotnet_diagnostic.cs0661.severity = warning +dotnet_diagnostic.cs0665.severity = warning +dotnet_diagnostic.cs0672.severity = warning +dotnet_diagnostic.cs0675.severity = warning +dotnet_diagnostic.cs0693.severity = warning +dotnet_diagnostic.cs0728.severity = warning +dotnet_diagnostic.cs1030.severity = warning +dotnet_diagnostic.cs1058.severity = warning +dotnet_diagnostic.cs1066.severity = warning +dotnet_diagnostic.cs1522.severity = warning +dotnet_diagnostic.cs1570.severity = warning +dotnet_diagnostic.cs1571.severity = warning +dotnet_diagnostic.cs1572.severity = warning +dotnet_diagnostic.cs1573.severity = warning +dotnet_diagnostic.cs1574.severity = warning +dotnet_diagnostic.cs1580.severity = warning +dotnet_diagnostic.cs1581.severity = warning +dotnet_diagnostic.cs1584.severity = warning +dotnet_diagnostic.cs1587.severity = warning +dotnet_diagnostic.cs1589.severity = warning +dotnet_diagnostic.cs1590.severity = warning +dotnet_diagnostic.cs1591.severity = warning +dotnet_diagnostic.cs1592.severity = warning +dotnet_diagnostic.cs1710.severity = warning +dotnet_diagnostic.cs1711.severity = warning +dotnet_diagnostic.cs1712.severity = warning +dotnet_diagnostic.cs1717.severity = warning +dotnet_diagnostic.cs1723.severity = warning +dotnet_diagnostic.cs1911.severity = warning +dotnet_diagnostic.cs1957.severity = warning +dotnet_diagnostic.cs1981.severity = warning +dotnet_diagnostic.cs1998.severity = warning +dotnet_diagnostic.cs4014.severity = warning +dotnet_diagnostic.cs7022.severity = warning +dotnet_diagnostic.cs7023.severity = warning +dotnet_diagnostic.cs7095.severity = warning +dotnet_diagnostic.cs8073.severity = warning +dotnet_diagnostic.cs8094.severity = warning +dotnet_diagnostic.cs8123.severity = warning +dotnet_diagnostic.cs8321.severity = warning +dotnet_diagnostic.cs8383.severity = warning +dotnet_diagnostic.cs8424.severity = warning +dotnet_diagnostic.cs8425.severity = warning +dotnet_diagnostic.cs8500.severity = warning +dotnet_diagnostic.cs8509.severity = warning +dotnet_diagnostic.cs8519.severity = warning +dotnet_diagnostic.cs8520.severity = warning +dotnet_diagnostic.cs8524.severity = warning +dotnet_diagnostic.cs8597.severity = warning +dotnet_diagnostic.cs8600.severity = warning +dotnet_diagnostic.cs8601.severity = warning +dotnet_diagnostic.cs8602.severity = warning +dotnet_diagnostic.cs8603.severity = warning +dotnet_diagnostic.cs8604.severity = warning +dotnet_diagnostic.cs8605.severity = warning +dotnet_diagnostic.cs8607.severity = warning +dotnet_diagnostic.cs8608.severity = warning +dotnet_diagnostic.cs8609.severity = warning +dotnet_diagnostic.cs8610.severity = warning +dotnet_diagnostic.cs8611.severity = warning +dotnet_diagnostic.cs8612.severity = warning +dotnet_diagnostic.cs8613.severity = warning +dotnet_diagnostic.cs8614.severity = warning +dotnet_diagnostic.cs8615.severity = warning +dotnet_diagnostic.cs8616.severity = warning +dotnet_diagnostic.cs8617.severity = warning +dotnet_diagnostic.cs8618.severity = warning +dotnet_diagnostic.cs8619.severity = warning +dotnet_diagnostic.cs8620.severity = warning +dotnet_diagnostic.cs8621.severity = warning +dotnet_diagnostic.cs8622.severity = warning +dotnet_diagnostic.cs8624.severity = warning +dotnet_diagnostic.cs8625.severity = warning +dotnet_diagnostic.cs8629.severity = warning +dotnet_diagnostic.cs8631.severity = warning +dotnet_diagnostic.cs8632.severity = warning +dotnet_diagnostic.cs8633.severity = warning +dotnet_diagnostic.cs8634.severity = warning +dotnet_diagnostic.cs8643.severity = warning +dotnet_diagnostic.cs8644.severity = warning +dotnet_diagnostic.cs8645.severity = warning +dotnet_diagnostic.cs8655.severity = warning +dotnet_diagnostic.cs8656.severity = warning +dotnet_diagnostic.cs8667.severity = warning +dotnet_diagnostic.cs8669.severity = warning +dotnet_diagnostic.cs8670.severity = warning +dotnet_diagnostic.cs8714.severity = warning +dotnet_diagnostic.cs8762.severity = warning +dotnet_diagnostic.cs8763.severity = warning +dotnet_diagnostic.cs8764.severity = warning +dotnet_diagnostic.cs8765.severity = warning +dotnet_diagnostic.cs8766.severity = warning +dotnet_diagnostic.cs8767.severity = warning +dotnet_diagnostic.cs8768.severity = warning +dotnet_diagnostic.cs8769.severity = warning +dotnet_diagnostic.cs8770.severity = warning +dotnet_diagnostic.cs8774.severity = warning +dotnet_diagnostic.cs8775.severity = warning +dotnet_diagnostic.cs8776.severity = warning +dotnet_diagnostic.cs8777.severity = warning +dotnet_diagnostic.cs8794.severity = warning +dotnet_diagnostic.cs8819.severity = warning +dotnet_diagnostic.cs8824.severity = warning +dotnet_diagnostic.cs8825.severity = warning +dotnet_diagnostic.cs8846.severity = warning +dotnet_diagnostic.cs8847.severity = warning +dotnet_diagnostic.cs8851.severity = warning +dotnet_diagnostic.cs8860.severity = warning +dotnet_diagnostic.cs8892.severity = warning +dotnet_diagnostic.cs8907.severity = warning +dotnet_diagnostic.cs8947.severity = warning +dotnet_diagnostic.cs8960.severity = warning +dotnet_diagnostic.cs8961.severity = warning +dotnet_diagnostic.cs8962.severity = warning +dotnet_diagnostic.cs8963.severity = warning +dotnet_diagnostic.cs8965.severity = warning +dotnet_diagnostic.cs8966.severity = warning +dotnet_diagnostic.cs8971.severity = warning +dotnet_diagnostic.cs8974.severity = warning +dotnet_diagnostic.cs8981.severity = warning +dotnet_diagnostic.cs9042.severity = warning +dotnet_diagnostic.cs9073.severity = warning +dotnet_diagnostic.cs9074.severity = warning +dotnet_diagnostic.cs9080.severity = warning +dotnet_diagnostic.cs9081.severity = warning +dotnet_diagnostic.cs9082.severity = warning +dotnet_diagnostic.cs9083.severity = warning +dotnet_diagnostic.cs9084.severity = warning +dotnet_diagnostic.cs9085.severity = warning +dotnet_diagnostic.cs9086.severity = warning +dotnet_diagnostic.cs9087.severity = warning +dotnet_diagnostic.cs9088.severity = warning +dotnet_diagnostic.cs9089.severity = warning +dotnet_diagnostic.cs9090.severity = warning +dotnet_diagnostic.cs9091.severity = warning +dotnet_diagnostic.cs9092.severity = warning +dotnet_diagnostic.cs9093.severity = warning +dotnet_diagnostic.cs9094.severity = warning +dotnet_diagnostic.cs9095.severity = warning +dotnet_diagnostic.cs9097.severity = warning +dotnet_diagnostic.cs9099.severity = warning +dotnet_diagnostic.cs9100.severity = warning +dotnet_diagnostic.cs9107.severity = warning +dotnet_diagnostic.cs9113.severity = warning +dotnet_diagnostic.cs9124.severity = warning +dotnet_diagnostic.cs9154.severity = warning +dotnet_diagnostic.cs9158.severity = warning +dotnet_diagnostic.cs9159.severity = warning +dotnet_diagnostic.cs9179.severity = warning +dotnet_diagnostic.cs9181.severity = warning +dotnet_diagnostic.cs9182.severity = warning +dotnet_diagnostic.cs9183.severity = warning +dotnet_diagnostic.cs9184.severity = warning +dotnet_diagnostic.cs9191.severity = warning +dotnet_diagnostic.cs9192.severity = warning +dotnet_diagnostic.cs9193.severity = warning +dotnet_diagnostic.cs9195.severity = warning +dotnet_diagnostic.cs9196.severity = warning +dotnet_diagnostic.cs9200.severity = warning +dotnet_diagnostic.cs9208.severity = warning +dotnet_diagnostic.cs9209.severity = warning +dotnet_diagnostic.fs0020.severity = warning +dotnet_diagnostic.fs0025.severity = warning +dotnet_diagnostic.fs0026.severity = warning +dotnet_diagnostic.fs0066.severity = warning +dotnet_diagnostic.fs0067.severity = warning +dotnet_diagnostic.fs0104.severity = warning +dotnet_diagnostic.fs0193.severity = warning +dotnet_diagnostic.fs0524.severity = warning +dotnet_diagnostic.fs1182.severity = warning +dotnet_diagnostic.fs1183.severity = warning +dotnet_diagnostic.fs3218.severity = warning +dotnet_diagnostic.fs3390.severity = warning +dotnet_diagnostic.fs3520.severity = warning +dotnet_diagnostic.wme006.severity = warning +dotnet_naming_rule.constants_rule.import_to_resharper = as_predefined +dotnet_naming_rule.constants_rule.severity = warning +dotnet_naming_rule.constants_rule.style = upper_camel_case_style +dotnet_naming_rule.constants_rule.symbols = constants_symbols +dotnet_naming_rule.event_rule.import_to_resharper = as_predefined +dotnet_naming_rule.event_rule.severity = warning +dotnet_naming_rule.event_rule.style = upper_camel_case_style +dotnet_naming_rule.event_rule.symbols = event_symbols +dotnet_naming_rule.interfaces_rule.import_to_resharper = as_predefined +dotnet_naming_rule.interfaces_rule.severity = warning +dotnet_naming_rule.interfaces_rule.style = i_upper_camel_case_style +dotnet_naming_rule.interfaces_rule.symbols = interfaces_symbols +dotnet_naming_rule.locals_rule.import_to_resharper = as_predefined +dotnet_naming_rule.locals_rule.severity = warning +dotnet_naming_rule.locals_rule.style = lower_camel_case_style +dotnet_naming_rule.locals_rule.symbols = locals_symbols +dotnet_naming_rule.local_constants_rule.import_to_resharper = as_predefined +dotnet_naming_rule.local_constants_rule.severity = warning +dotnet_naming_rule.local_constants_rule.style = lower_camel_case_style +dotnet_naming_rule.local_constants_rule.symbols = local_constants_symbols +dotnet_naming_rule.local_functions_rule.import_to_resharper = as_predefined +dotnet_naming_rule.local_functions_rule.severity = warning +dotnet_naming_rule.local_functions_rule.style = upper_camel_case_style +dotnet_naming_rule.local_functions_rule.symbols = local_functions_symbols +dotnet_naming_rule.method_rule.import_to_resharper = as_predefined +dotnet_naming_rule.method_rule.severity = warning +dotnet_naming_rule.method_rule.style = upper_camel_case_style +dotnet_naming_rule.method_rule.symbols = method_symbols +dotnet_naming_rule.parameters_rule.import_to_resharper = as_predefined +dotnet_naming_rule.parameters_rule.severity = warning +dotnet_naming_rule.parameters_rule.style = lower_camel_case_style +dotnet_naming_rule.parameters_rule.symbols = parameters_symbols +dotnet_naming_rule.private_constants_rule.import_to_resharper = as_predefined +dotnet_naming_rule.private_constants_rule.severity = warning +dotnet_naming_rule.private_constants_rule.style = upper_camel_case_style +dotnet_naming_rule.private_constants_rule.symbols = private_constants_symbols +dotnet_naming_rule.private_instance_fields_rule.import_to_resharper = as_predefined +dotnet_naming_rule.private_instance_fields_rule.severity = warning +dotnet_naming_rule.private_instance_fields_rule.style = lower_camel_case_style_1 +dotnet_naming_rule.private_instance_fields_rule.symbols = private_instance_fields_symbols +dotnet_naming_rule.private_static_fields_rule.import_to_resharper = as_predefined +dotnet_naming_rule.private_static_fields_rule.severity = warning +dotnet_naming_rule.private_static_fields_rule.style = lower_camel_case_style_1 +dotnet_naming_rule.private_static_fields_rule.symbols = private_static_fields_symbols +dotnet_naming_rule.private_static_readonly_rule.import_to_resharper = as_predefined +dotnet_naming_rule.private_static_readonly_rule.severity = warning +dotnet_naming_rule.private_static_readonly_rule.style = upper_camel_case_style +dotnet_naming_rule.private_static_readonly_rule.symbols = private_static_readonly_symbols +dotnet_naming_rule.property_rule.import_to_resharper = as_predefined +dotnet_naming_rule.property_rule.severity = warning +dotnet_naming_rule.property_rule.style = upper_camel_case_style +dotnet_naming_rule.property_rule.symbols = property_symbols +dotnet_naming_rule.public_fields_rule.import_to_resharper = as_predefined +dotnet_naming_rule.public_fields_rule.severity = warning +dotnet_naming_rule.public_fields_rule.style = upper_camel_case_style +dotnet_naming_rule.public_fields_rule.symbols = public_fields_symbols +dotnet_naming_rule.static_readonly_rule.import_to_resharper = as_predefined +dotnet_naming_rule.static_readonly_rule.severity = warning +dotnet_naming_rule.static_readonly_rule.style = upper_camel_case_style +dotnet_naming_rule.static_readonly_rule.symbols = static_readonly_symbols +dotnet_naming_rule.types_and_namespaces_rule.import_to_resharper = as_predefined +dotnet_naming_rule.types_and_namespaces_rule.severity = warning +dotnet_naming_rule.types_and_namespaces_rule.style = upper_camel_case_style +dotnet_naming_rule.types_and_namespaces_rule.symbols = types_and_namespaces_symbols +dotnet_naming_rule.type_parameters_rule.import_to_resharper = as_predefined +dotnet_naming_rule.type_parameters_rule.severity = warning +dotnet_naming_rule.type_parameters_rule.style = t_upper_camel_case_style +dotnet_naming_rule.type_parameters_rule.symbols = type_parameters_symbols +dotnet_naming_rule.unity_serialized_field_rule.import_to_resharper = True +dotnet_naming_rule.unity_serialized_field_rule.resharper_description = Unity serialized field +dotnet_naming_rule.unity_serialized_field_rule.resharper_guid = 5f0fdb63-c892-4d2c-9324-15c80b22a7ef +dotnet_naming_rule.unity_serialized_field_rule.severity = warning +dotnet_naming_rule.unity_serialized_field_rule.style = lower_camel_case_style +dotnet_naming_rule.unity_serialized_field_rule.symbols = unity_serialized_field_symbols +dotnet_naming_style.i_upper_camel_case_style.capitalization = pascal_case +dotnet_naming_style.i_upper_camel_case_style.required_prefix = I +dotnet_naming_style.lower_camel_case_style.capitalization = camel_case +dotnet_naming_style.lower_camel_case_style_1.capitalization = camel_case +dotnet_naming_style.lower_camel_case_style_1.required_prefix = _ +dotnet_naming_style.t_upper_camel_case_style.capitalization = pascal_case +dotnet_naming_style.t_upper_camel_case_style.required_prefix = T +dotnet_naming_style.upper_camel_case_style.capitalization = pascal_case +dotnet_naming_symbols.constants_symbols.applicable_accessibilities = public, internal, protected, protected_internal, private_protected +dotnet_naming_symbols.constants_symbols.applicable_kinds = field +dotnet_naming_symbols.constants_symbols.required_modifiers = const +dotnet_naming_symbols.event_symbols.applicable_accessibilities = * +dotnet_naming_symbols.event_symbols.applicable_kinds = event +dotnet_naming_symbols.interfaces_symbols.applicable_accessibilities = * +dotnet_naming_symbols.interfaces_symbols.applicable_kinds = interface +dotnet_naming_symbols.locals_symbols.applicable_accessibilities = * +dotnet_naming_symbols.locals_symbols.applicable_kinds = local +dotnet_naming_symbols.local_constants_symbols.applicable_accessibilities = * +dotnet_naming_symbols.local_constants_symbols.applicable_kinds = local +dotnet_naming_symbols.local_constants_symbols.required_modifiers = const +dotnet_naming_symbols.local_functions_symbols.applicable_accessibilities = * +dotnet_naming_symbols.local_functions_symbols.applicable_kinds = local_function +dotnet_naming_symbols.method_symbols.applicable_accessibilities = * +dotnet_naming_symbols.method_symbols.applicable_kinds = method +dotnet_naming_symbols.parameters_symbols.applicable_accessibilities = * +dotnet_naming_symbols.parameters_symbols.applicable_kinds = parameter +dotnet_naming_symbols.private_constants_symbols.applicable_accessibilities = private +dotnet_naming_symbols.private_constants_symbols.applicable_kinds = field +dotnet_naming_symbols.private_constants_symbols.required_modifiers = const +dotnet_naming_symbols.private_instance_fields_symbols.applicable_accessibilities = private +dotnet_naming_symbols.private_instance_fields_symbols.applicable_kinds = field +dotnet_naming_symbols.private_static_fields_symbols.applicable_accessibilities = private +dotnet_naming_symbols.private_static_fields_symbols.applicable_kinds = field +dotnet_naming_symbols.private_static_fields_symbols.required_modifiers = static +dotnet_naming_symbols.private_static_readonly_symbols.applicable_accessibilities = private +dotnet_naming_symbols.private_static_readonly_symbols.applicable_kinds = field +dotnet_naming_symbols.private_static_readonly_symbols.required_modifiers = static, readonly +dotnet_naming_symbols.property_symbols.applicable_accessibilities = * +dotnet_naming_symbols.property_symbols.applicable_kinds = property +dotnet_naming_symbols.public_fields_symbols.applicable_accessibilities = public, internal, protected, protected_internal, private_protected +dotnet_naming_symbols.public_fields_symbols.applicable_kinds = field +dotnet_naming_symbols.static_readonly_symbols.applicable_accessibilities = public, internal, protected, protected_internal, private_protected +dotnet_naming_symbols.static_readonly_symbols.applicable_kinds = field +dotnet_naming_symbols.static_readonly_symbols.required_modifiers = static, readonly +dotnet_naming_symbols.types_and_namespaces_symbols.applicable_accessibilities = * +dotnet_naming_symbols.types_and_namespaces_symbols.applicable_kinds = namespace, class, struct, enum, delegate +dotnet_naming_symbols.type_parameters_symbols.applicable_accessibilities = * +dotnet_naming_symbols.type_parameters_symbols.applicable_kinds = type_parameter +dotnet_naming_symbols.unity_serialized_field_symbols.applicable_accessibilities = * +dotnet_naming_symbols.unity_serialized_field_symbols.applicable_kinds = +dotnet_naming_symbols.unity_serialized_field_symbols.resharper_applicable_kinds = unity_serialised_field +dotnet_naming_symbols.unity_serialized_field_symbols.resharper_required_modifiers = instance +dotnet_separate_import_directive_groups = false +dotnet_sort_system_directives_first = true +dotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary:none +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:none +dotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary:none +dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion +dotnet_style_predefined_type_for_member_access = true:suggestion +dotnet_style_qualification_for_event = false:suggestion +dotnet_style_qualification_for_field = false:suggestion +dotnet_style_qualification_for_method = false:suggestion +dotnet_style_qualification_for_property = false:suggestion +dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion +file_header_template = +fsharp_align_function_signature_to_indentation = false +fsharp_alternative_long_member_definitions = false +fsharp_indent_on_try_with = false +fsharp_keep_if_then_in_same_line = false +fsharp_max_array_or_list_width = 80 +fsharp_max_elmish_width = 40 +fsharp_max_function_binding_width = 40 +fsharp_max_if_then_else_short_width = 60 +fsharp_max_infix_operator_expression = 80 +fsharp_max_record_width = 40 +fsharp_max_value_binding_width = 80 +fsharp_multiline_block_brackets_on_same_column = false +fsharp_multi_line_lambda_closing_newline = false +fsharp_newline_between_type_definition_and_members = true +fsharp_semicolon_at_end_of_line = false +fsharp_single_argument_web_mode = false +fsharp_space_after_comma = true +fsharp_space_after_semicolon = true +fsharp_space_around_delimiter = true +fsharp_space_before_class_constructor = false +fsharp_space_before_colon = false +fsharp_space_before_lowercase_invocation = true +fsharp_space_before_member = false +fsharp_space_before_parameter = true +fsharp_space_before_semicolon = false +fsharp_space_before_uppercase_invocation = false + +# ReSharper properties +resharper_accessor_owner_body = expression_body +resharper_alignment_tab_fill_style = use_spaces +resharper_align_first_arg_by_paren = false +resharper_align_linq_query = false +resharper_align_multiline_array_and_object_initializer = false +resharper_align_multiline_array_initializer = true +resharper_align_multiline_binary_patterns = false +resharper_align_multiline_comments = true +resharper_align_multiline_ctor_init = true +resharper_align_multiline_expression_braces = false +resharper_align_multiline_implements_list = true +resharper_align_multiline_list_pattern = false +resharper_align_multiline_property_pattern = false +resharper_align_multiline_statement_conditions = true +resharper_align_multiline_switch_expression = false +resharper_align_multiline_type_argument = true +resharper_align_multiline_type_parameter = true +resharper_align_multline_type_parameter_constrains = false +resharper_align_multline_type_parameter_list = false +resharper_align_ternary = align_not_nested +resharper_align_tuple_components = false +resharper_allow_alias = true +resharper_allow_comment_after_lbrace = false +resharper_allow_far_alignment = false +resharper_allow_high_precedence_app_parens = true +resharper_always_use_end_of_line_brace_style = false +resharper_apply_auto_detected_rules = false +resharper_apply_on_completion = false +resharper_arguments_anonymous_function = positional +resharper_arguments_literal = positional +resharper_arguments_named = positional +resharper_arguments_other = positional +resharper_arguments_skip_single = false +resharper_arguments_string_literal = positional +resharper_attribute_style = do_not_touch +resharper_autodetect_indent_settings = true +resharper_blank_lines_after_access_specifier = 0 +resharper_blank_lines_after_block_statements = 1 +resharper_blank_lines_after_case = 0 +resharper_blank_lines_after_control_transfer_statements = 0 +resharper_blank_lines_after_file_scoped_namespace_directive = 1 +resharper_blank_lines_after_imports = 1 +resharper_blank_lines_after_multiline_statements = 0 +resharper_blank_lines_after_options = 1 +resharper_blank_lines_after_start_comment = 1 +resharper_blank_lines_after_using_list = 1 +resharper_blank_lines_around_accessor = 0 +resharper_blank_lines_around_auto_property = 1 +resharper_blank_lines_around_block_case_section = 0 +resharper_blank_lines_around_class_definition = 1 +resharper_blank_lines_around_different_module_member_kinds = 1 +resharper_blank_lines_around_field = 1 +resharper_blank_lines_around_function_declaration = 0 +resharper_blank_lines_around_function_definition = 1 +resharper_blank_lines_around_global_attribute = 0 +resharper_blank_lines_around_invocable = 1 +resharper_blank_lines_around_local_method = 1 +resharper_blank_lines_around_multiline_case_section = 0 +resharper_blank_lines_around_multiline_module_members = 1 +resharper_blank_lines_around_namespace = 1 +resharper_blank_lines_around_other_declaration = 0 +resharper_blank_lines_around_property = 1 +resharper_blank_lines_around_razor_functions = 1 +resharper_blank_lines_around_razor_helpers = 1 +resharper_blank_lines_around_razor_sections = 1 +resharper_blank_lines_around_region = 1 +resharper_blank_lines_around_single_line_accessor = 0 +resharper_blank_lines_around_single_line_auto_property = 0 +resharper_blank_lines_around_single_line_field = 0 +resharper_blank_lines_around_single_line_function_definition = 0 +resharper_blank_lines_around_single_line_invocable = 0 +resharper_blank_lines_around_single_line_local_method = 0 +resharper_blank_lines_around_single_line_module_member = 0 +resharper_blank_lines_around_single_line_property = 0 +resharper_blank_lines_around_single_line_type = 1 +resharper_blank_lines_around_type = 1 +resharper_blank_lines_before_access_specifier = 1 +resharper_blank_lines_before_block_statements = 0 +resharper_blank_lines_before_case = 0 +resharper_blank_lines_before_control_transfer_statements = 0 +resharper_blank_lines_before_first_module_member_in_nested_module = 0 +resharper_blank_lines_before_first_module_member_in_top_level_module = 1 +resharper_blank_lines_before_multiline_statements = 0 +resharper_blank_lines_before_single_line_comment = 0 +resharper_blank_lines_inside_namespace = 0 +resharper_blank_lines_inside_region = 1 +resharper_blank_lines_inside_type = 0 +resharper_blank_line_after_pi = true +resharper_blank_line_around_top_level_modules = 2 +resharper_braces_for_dowhile = required +resharper_braces_for_fixed = required +resharper_braces_for_for = not_required +resharper_braces_for_foreach = not_required +resharper_braces_for_ifelse = not_required_for_both +resharper_braces_for_lock = required +resharper_braces_for_using = required +resharper_braces_for_while = not_required +resharper_braces_redundant = true +resharper_break_template_declaration = line_break +resharper_builtin_type_apply_to_native_integer = false +resharper_can_use_global_alias = true +resharper_configure_await_analysis_mode = disabled +resharper_constructor_or_destructor_body = block_body +resharper_continuous_indent_multiplier = 1 +resharper_continuous_line_indent = single +resharper_cpp_align_multiline_argument = true +resharper_cpp_align_multiline_binary_expressions_chain = false +resharper_cpp_align_multiline_calls_chain = true +resharper_cpp_align_multiline_extends_list = true +resharper_cpp_align_multiline_for_stmt = true +resharper_cpp_align_multiline_parameter = true +resharper_cpp_align_multiple_declaration = true +resharper_cpp_anonymous_method_declaration_braces = next_line +resharper_cpp_case_block_braces = next_line_shifted_2 +resharper_cpp_empty_block_style = multiline +resharper_cpp_indent_switch_labels = false +resharper_cpp_insert_final_newline = true +resharper_cpp_invocable_declaration_braces = next_line +resharper_cpp_max_line_length = 120 +resharper_cpp_new_line_before_while = true +resharper_cpp_other_braces = next_line +resharper_cpp_space_after_unary_operator = false +resharper_cpp_space_around_binary_operator = true +resharper_cpp_type_declaration_braces = next_line +resharper_cpp_wrap_lines = true +resharper_csharp_align_multiline_argument = false +resharper_csharp_align_multiline_binary_expressions_chain = true +resharper_csharp_align_multiline_calls_chain = false +resharper_csharp_align_multiline_expression = false +resharper_csharp_align_multiline_extends_list = false +resharper_csharp_align_multiline_for_stmt = false +resharper_csharp_align_multiline_parameter = false +resharper_csharp_align_multiple_declaration = false +resharper_csharp_empty_block_style = multiline +resharper_csharp_insert_final_newline = false +resharper_csharp_keep_nontrivial_alias = false +resharper_csharp_max_line_length = 120 +resharper_csharp_naming_rule.enum_member = AaBb +resharper_csharp_naming_rule.method_property_event = AaBb +resharper_csharp_naming_rule.other = AaBb +resharper_csharp_new_line_before_while = false +resharper_csharp_prefer_qualified_reference = false +resharper_csharp_space_after_unary_operator = false +resharper_csharp_wrap_lines = true +resharper_cxxcli_property_declaration_braces = next_line +resharper_declaration_body_on_the_same_line = if_owner_is_single_line +resharper_default_exception_variable_name = e +resharper_default_value_when_type_evident = default_literal +resharper_default_value_when_type_not_evident = default_literal +resharper_delete_quotes_from_solid_values = false +resharper_disable_blank_line_changes = false +resharper_disable_formatter = false +resharper_disable_indenter = false +resharper_disable_int_align = false +resharper_disable_line_break_changes = false +resharper_disable_line_break_removal = false +resharper_disable_space_changes = false +resharper_disable_space_changes_before_trailing_comment = false +resharper_dont_remove_extra_blank_lines = false +resharper_enable_wrapping = false +resharper_enforce_line_ending_style = false +resharper_event_handler_pattern_long = $object$On$event$ +resharper_event_handler_pattern_short = On$event$ +resharper_export_declaration_braces = next_line +resharper_expression_braces = inside +resharper_expression_pars = inside +resharper_extra_spaces = remove_all +resharper_force_attribute_style = separate +resharper_force_chop_compound_do_expression = false +resharper_force_chop_compound_if_expression = false +resharper_force_chop_compound_while_expression = false +resharper_formatter_off_tag = @formatter:off +resharper_formatter_on_tag = @formatter:on +resharper_formatter_tags_accept_regexp = false +resharper_formatter_tags_enabled = true +resharper_format_leading_spaces_decl = false +resharper_free_block_braces = next_line +resharper_fsharp_empty_block_style = together_same_line +resharper_fsharp_insert_final_newline = false +resharper_fsharp_max_line_length = 120 +resharper_fsharp_type_declaration_braces = pico +resharper_fsharp_wrap_lines = true +resharper_function_declaration_return_type_style = do_not_change +resharper_function_definition_return_type_style = do_not_change +resharper_generator_mode = false +resharper_html_attribute_indent = align_by_first_attribute +resharper_html_insert_final_newline = false +resharper_html_linebreak_before_elements = body, div, p, form, h1, h2, h3 +resharper_html_max_blank_lines_between_tags = 2 +resharper_html_max_line_length = 120 +resharper_html_pi_attribute_style = on_single_line +resharper_html_space_before_self_closing = false +resharper_html_wrap_lines = true +resharper_ignore_space_preservation = false +resharper_include_prefix_comment_in_indent = false +resharper_indent_access_specifiers_from_class = false +resharper_indent_aligned_ternary = true +resharper_indent_anonymous_method_block = false +resharper_indent_braces_inside_statement_conditions = true +resharper_indent_case_from_select = true +resharper_indent_child_elements = OneIndent +resharper_indent_class_members_from_access_specifiers = false +resharper_indent_comment = true +resharper_indent_export_declaration_members = true +resharper_indent_inside_namespace = true +resharper_indent_invocation_pars = inside +resharper_indent_member_initializer_list = true +resharper_indent_method_decl_pars = inside +resharper_indent_nested_fixed_stmt = false +resharper_indent_nested_foreach_stmt = false +resharper_indent_nested_for_stmt = false +resharper_indent_nested_lock_stmt = false +resharper_indent_nested_usings_stmt = false +resharper_indent_nested_while_stmt = false +resharper_indent_pars = inside +resharper_indent_preprocessor_directives = none +resharper_indent_preprocessor_if = no_indent +resharper_indent_preprocessor_other = no_indent +resharper_indent_preprocessor_region = usual_indent +resharper_indent_primary_constructor_decl_pars = inside +resharper_indent_raw_literal_string = align +resharper_indent_statement_pars = inside +resharper_indent_text = OneIndent +resharper_indent_typearg_angles = inside +resharper_indent_typeparam_angles = inside +resharper_indent_type_constraints = true +resharper_indent_wrapped_function_names = false +resharper_instance_members_qualify_declared_in = this_class, base_class +resharper_int_align = false +resharper_int_align_bitfield_sizes = false +resharper_int_align_comments = false +resharper_int_align_declaration_names = false +resharper_int_align_enum_initializers = false +resharper_int_align_eq = false +resharper_int_align_fix_in_adjacent = true +resharper_keep_blank_lines_in_code = 2 +resharper_keep_blank_lines_in_declarations = 2 +resharper_keep_existing_attribute_arrangement = false +resharper_keep_existing_declaration_block_arrangement = false +resharper_keep_existing_declaration_parens_arrangement = true +resharper_keep_existing_embedded_arrangement = true +resharper_keep_existing_embedded_block_arrangement = false +resharper_keep_existing_enum_arrangement = false +resharper_keep_existing_expr_member_arrangement = true +resharper_keep_existing_invocation_parens_arrangement = true +resharper_keep_existing_line_break_before_declaration_body = true +resharper_keep_existing_list_patterns_arrangement = true +resharper_keep_existing_primary_constructor_declaration_parens_arrangement = true +resharper_keep_existing_property_patterns_arrangement = true +resharper_keep_existing_switch_expression_arrangement = true +resharper_keep_max_blank_line_around_module_members = 2 +resharper_keep_user_linebreaks = true +resharper_keep_user_wrapping = true +resharper_linebreaks_around_razor_statements = true +resharper_linebreaks_inside_tags_for_elements_longer_than = 2147483647 +resharper_linebreaks_inside_tags_for_elements_with_child_elements = true +resharper_linebreaks_inside_tags_for_multiline_elements = true +resharper_linebreak_before_all_elements = false +resharper_linebreak_before_multiline_elements = true +resharper_linebreak_before_singleline_elements = false +resharper_line_break_after_colon_in_member_initializer_lists = do_not_change +resharper_line_break_after_comma_in_member_initializer_lists = false +resharper_line_break_after_deref_in_trailing_return_types = do_not_change +resharper_line_break_after_init_statement = do_not_change +resharper_line_break_after_type_repr_access_modifier = true +resharper_line_break_before_comma_in_member_initializer_lists = false +resharper_line_break_before_deref_in_trailing_return_types = do_not_change +resharper_line_break_before_requires_clause = do_not_change +resharper_linkage_specification_braces = end_of_line +resharper_linkage_specification_indentation = none +resharper_local_function_body = block_body +resharper_macro_block_begin = +resharper_macro_block_end = +resharper_max_array_initializer_elements_on_line = 10000 +resharper_max_attribute_length_for_same_line = 38 +resharper_max_enum_members_on_line = 3 +resharper_max_formal_parameters_on_line = 10000 +resharper_max_initializer_elements_on_line = 4 +resharper_max_invocation_arguments_on_line = 10000 +resharper_max_primary_constructor_parameters_on_line = 10000 +resharper_member_initializer_list_style = do_not_change +resharper_method_or_operator_body = block_body +resharper_namespace_declaration_braces = next_line +resharper_namespace_indentation = all +resharper_nested_ternary_style = autodetect +resharper_never_outdent_pipe_operators = true +resharper_new_line_before_catch = true +resharper_new_line_before_else = true +resharper_new_line_before_enumerators = true +resharper_normalize_tag_names = false +resharper_no_indent_inside_elements = html, body, thead, tbody, tfoot +resharper_no_indent_inside_if_element_longer_than = 200 +resharper_null_checking_pattern_style = not_null_pattern +resharper_object_creation_when_type_evident = target_typed +resharper_object_creation_when_type_not_evident = explicitly_typed +resharper_old_engine = false +resharper_outdent_binary_operators = true +resharper_outdent_binary_ops = false +resharper_outdent_binary_pattern_ops = false +resharper_outdent_commas = false +resharper_outdent_dots = false +resharper_outdent_namespace_member = false +resharper_outdent_statement_labels = false +resharper_outdent_ternary_ops = false +resharper_parentheses_non_obvious_operations = none, shift, bitwise_and, bitwise_exclusive_or, bitwise_inclusive_or, bitwise +resharper_parentheses_redundancy_style = remove_if_not_clarifies_precedence +resharper_parentheses_same_type_operations = false +resharper_pi_attributes_indent = align_by_first_attribute +resharper_place_accessorholder_attribute_on_same_line = if_owner_is_single_line +resharper_place_accessor_attribute_on_same_line = if_owner_is_single_line +resharper_place_comments_at_first_column = false +resharper_place_constructor_initializer_on_same_line = true +resharper_place_event_attribute_on_same_line = false +resharper_place_expr_accessor_on_single_line = if_owner_is_single_line +resharper_place_expr_method_on_single_line = if_owner_is_single_line +resharper_place_expr_property_on_single_line = if_owner_is_single_line +resharper_place_field_attribute_on_same_line = true +resharper_place_linq_into_on_new_line = true +resharper_place_method_attribute_on_same_line = false +resharper_place_namespace_definitions_on_same_line = false +resharper_place_property_attribute_on_same_line = false +resharper_place_record_field_attribute_on_same_line = if_owner_is_single_line +resharper_place_simple_case_statement_on_same_line = false +resharper_place_simple_embedded_statement_on_same_line = if_owner_is_single_line +resharper_place_simple_initializer_on_single_line = true +resharper_place_simple_list_pattern_on_single_line = true +resharper_place_simple_property_pattern_on_single_line = true +resharper_place_simple_switch_expression_on_single_line = false +resharper_place_type_attribute_on_same_line = false +resharper_place_type_constraints_on_same_line = true +resharper_prefer_explicit_discard_declaration = false +resharper_prefer_separate_deconstructed_variables_declaration = false +resharper_preserve_spaces_inside_tags = pre, textarea +resharper_qualified_using_at_nested_scope = false +resharper_quote_style = doublequoted +resharper_razor_prefer_qualified_reference = true +resharper_remove_blank_lines_near_braces = false +resharper_remove_blank_lines_near_braces_in_code = true +resharper_remove_blank_lines_near_braces_in_declarations = true +resharper_remove_only_unused_aliases = true +resharper_remove_this_qualifier = true +resharper_remove_unused_only_aliases = false +resharper_requires_expression_braces = next_line +resharper_resx_attribute_indent = single_indent +resharper_resx_insert_final_newline = false +resharper_resx_linebreak_before_elements = +resharper_resx_max_blank_lines_between_tags = 0 +resharper_resx_max_line_length = 2147483647 +resharper_resx_pi_attribute_style = do_not_touch +resharper_resx_space_before_self_closing = false +resharper_resx_wrap_lines = false +resharper_resx_wrap_tags_and_pi = false +resharper_resx_wrap_text = false +resharper_shaderlab_brace_style = next_line +resharper_shaderlab_insert_final_newline = false +resharper_shaderlab_max_line_length = 120 +resharper_shaderlab_wrap_lines = true +resharper_show_autodetect_configure_formatting_tip = true +resharper_simple_block_style = do_not_change +resharper_simple_case_statement_style = do_not_change +resharper_simple_embedded_statement_style = do_not_change +resharper_sort_attributes = false +resharper_sort_class_selectors = false +resharper_sort_usings = true +resharper_sort_usings_lowercase_first = false +resharper_spaces_around_eq_in_attribute = false +resharper_spaces_around_eq_in_pi_attribute = false +resharper_spaces_inside_tags = false +resharper_space_after_attributes = true +resharper_space_after_attribute_target_colon = true +resharper_space_after_cast = false +resharper_space_after_colon = true +resharper_space_after_colon_in_bitfield_declarator = true +resharper_space_after_colon_in_case = true +resharper_space_after_colon_in_inheritance_clause = true +resharper_space_after_comma = true +resharper_space_after_ellipsis_in_parameter_pack = true +resharper_space_after_for_colon = true +resharper_space_after_keywords_in_control_flow_statements = true +resharper_space_after_last_attribute = false +resharper_space_after_last_pi_attribute = false +resharper_space_after_operator_keyword = true +resharper_space_after_operator_not = false +resharper_space_after_ptr_in_data_member = true +resharper_space_after_ptr_in_data_members = false +resharper_space_after_ptr_in_method = true +resharper_space_after_ptr_in_nested_declarator = false +resharper_space_after_ref_in_data_member = true +resharper_space_after_ref_in_data_members = false +resharper_space_after_ref_in_method = true +resharper_space_after_semicolon_in_for_statement = true +resharper_space_after_ternary_colon = true +resharper_space_after_ternary_quest = true +resharper_space_after_triple_slash = true +resharper_space_after_type_parameter_constraint_colon = true +resharper_space_around_additive_op = true +resharper_space_around_alias_eq = true +resharper_space_around_assignment_op = true +resharper_space_around_assignment_operator = true +resharper_space_around_deref_in_trailing_return_type = true +resharper_space_around_lambda_arrow = true +resharper_space_around_member_access_operator = false +resharper_space_around_relational_op = true +resharper_space_around_shift_op = true +resharper_space_around_stmt_colon = true +resharper_space_around_ternary_operator = true +resharper_space_before_array_rank_parentheses = false +resharper_space_before_attribute_target_colon = false +resharper_space_before_checked_parentheses = false +resharper_space_before_colon = false +resharper_space_before_colon_in_bitfield_declarator = true +resharper_space_before_colon_in_case = false +resharper_space_before_colon_in_inheritance_clause = true +resharper_space_before_comma = false +resharper_space_before_default_parentheses = false +resharper_space_before_ellipsis_in_parameter_pack = false +resharper_space_before_empty_invocation_parentheses = false +resharper_space_before_empty_method_parentheses = false +resharper_space_before_for_colon = true +resharper_space_before_initializer_braces = false +resharper_space_before_invocation_parentheses = false +resharper_space_before_label_colon = false +resharper_space_before_lambda_parentheses = false +resharper_space_before_method_parentheses = false +resharper_space_before_nameof_parentheses = false +resharper_space_before_new_parentheses = false +resharper_space_before_nullable_mark = false +resharper_space_before_open_square_brackets = false +resharper_space_before_pointer_asterik_declaration = false +resharper_space_before_postfix_operator = false +resharper_space_before_ptr_in_abstract_decl = false +resharper_space_before_ptr_in_data_member = false +resharper_space_before_ptr_in_data_members = true +resharper_space_before_ptr_in_method = false +resharper_space_before_ref_in_abstract_decl = false +resharper_space_before_ref_in_data_member = false +resharper_space_before_ref_in_data_members = true +resharper_space_before_ref_in_method = false +resharper_space_before_semicolon = false +resharper_space_before_semicolon_in_for_statement = false +resharper_space_before_singleline_accessorholder = true +resharper_space_before_sizeof_parentheses = false +resharper_space_before_template_args = false +resharper_space_before_template_params = true +resharper_space_before_ternary_colon = true +resharper_space_before_ternary_quest = true +resharper_space_before_trailing_comment = true +resharper_space_before_typeof_parentheses = false +resharper_space_before_type_argument_angle = false +resharper_space_before_type_parameter_angle = false +resharper_space_before_type_parameter_constraint_colon = true +resharper_space_before_type_parameter_parentheses = true +resharper_space_between_accessors_in_singleline_property = true +resharper_space_between_attribute_sections = true +resharper_space_between_closing_angle_brackets_in_template_args = false +resharper_space_between_keyword_and_expression = true +resharper_space_between_keyword_and_type = true +resharper_space_between_method_call_empty_parameter_list_parentheses = false +resharper_space_between_method_call_name_and_opening_parenthesis = false +resharper_space_between_method_call_parameter_list_parentheses = false +resharper_space_between_method_declaration_empty_parameter_list_parentheses = false +resharper_space_between_method_declaration_name_and_open_parenthesis = false +resharper_space_between_method_declaration_parameter_list_parentheses = false +resharper_space_between_parentheses_of_control_flow_statements = false +resharper_space_between_square_brackets = false +resharper_space_between_typecast_parentheses = false +resharper_space_in_singleline_accessorholder = true +resharper_space_in_singleline_anonymous_method = true +resharper_space_in_singleline_method = true +resharper_space_near_postfix_and_prefix_op = false +resharper_space_within_array_initialization_braces = false +resharper_space_within_array_rank_empty_parentheses = false +resharper_space_within_array_rank_parentheses = false +resharper_space_within_attribute_angles = false +resharper_space_within_checked_parentheses = false +resharper_space_within_declaration_parentheses = false +resharper_space_within_default_parentheses = false +resharper_space_within_empty_blocks = false +resharper_space_within_empty_braces = true +resharper_space_within_empty_initializer_braces = false +resharper_space_within_empty_invocation_parentheses = false +resharper_space_within_empty_method_parentheses = false +resharper_space_within_empty_template_params = false +resharper_space_within_expression_parentheses = false +resharper_space_within_initializer_braces = false +resharper_space_within_invocation_parentheses = false +resharper_space_within_method_parentheses = false +resharper_space_within_nameof_parentheses = false +resharper_space_within_new_parentheses = false +resharper_space_within_parentheses = false +resharper_space_within_single_line_array_initializer_braces = true +resharper_space_within_sizeof_parentheses = false +resharper_space_within_slice_pattern = true +resharper_space_within_template_args = false +resharper_space_within_template_params = false +resharper_space_within_tuple_parentheses = false +resharper_space_within_typeof_parentheses = false +resharper_space_within_type_argument_angles = false +resharper_space_within_type_parameter_angles = false +resharper_space_within_type_parameter_parentheses = false +resharper_special_else_if_treatment = true +resharper_static_members_qualify_members = none +resharper_static_members_qualify_with = declared_type +resharper_stick_comment = true +resharper_support_vs_event_naming_pattern = true +resharper_T4_insert_final_newline = false +resharper_T4_max_line_length = 120 +resharper_T4_wrap_lines = true +resharper_toplevel_function_declaration_return_type_style = do_not_change +resharper_toplevel_function_definition_return_type_style = do_not_change +resharper_trailing_comma_in_multiline_lists = false +resharper_trailing_comma_in_singleline_lists = false +resharper_use_continuous_indent_inside_initializer_braces = true +resharper_use_continuous_indent_inside_parens = true +resharper_use_continuous_line_indent_in_expression_braces = false +resharper_use_continuous_line_indent_in_method_pars = false +resharper_use_heuristics_for_body_style = true +resharper_use_indents_from_main_language_in_file = true +resharper_use_indent_from_previous_element = true +resharper_use_indent_from_vs = false +resharper_use_old_engine = false +resharper_use_roslyn_logic_for_evident_types = false +resharper_vb_align_multiline_argument = true +resharper_vb_align_multiline_expression = true +resharper_vb_align_multiline_parameter = true +resharper_vb_align_multiple_declaration = true +resharper_vb_insert_final_newline = false +resharper_vb_keep_nontrivial_alias = true +resharper_vb_max_line_length = 120 +resharper_vb_place_field_attribute_on_same_line = true +resharper_vb_place_method_attribute_on_same_line = false +resharper_vb_place_type_attribute_on_same_line = false +resharper_vb_prefer_qualified_reference = false +resharper_vb_space_after_unary_operator = true +resharper_vb_space_around_multiplicative_op = false +resharper_vb_wrap_lines = true +resharper_wrap_after_binary_opsign = true +resharper_wrap_after_declaration_lpar = false +resharper_wrap_after_dot = false +resharper_wrap_after_dot_in_method_calls = false +resharper_wrap_after_expression_lbrace = true +resharper_wrap_after_invocation_lpar = false +resharper_wrap_after_primary_constructor_declaration_lpar = true +resharper_wrap_after_property_in_chained_method_calls = false +resharper_wrap_arguments_style = wrap_if_long +resharper_wrap_around_elements = true +resharper_wrap_array_initializer_style = wrap_if_long +resharper_wrap_base_clause_style = wrap_if_long +resharper_wrap_before_arrow_with_expressions = false +resharper_wrap_before_binary_opsign = false +resharper_wrap_before_binary_pattern_op = true +resharper_wrap_before_colon = false +resharper_wrap_before_comma = false +resharper_wrap_before_comma_in_base_clause = false +resharper_wrap_before_declaration_lpar = false +resharper_wrap_before_declaration_rpar = false +resharper_wrap_before_eq = false +resharper_wrap_before_expression_rbrace = true +resharper_wrap_before_extends_colon = false +resharper_wrap_before_first_method_call = false +resharper_wrap_before_first_type_parameter_constraint = false +resharper_wrap_before_invocation_lpar = false +resharper_wrap_before_invocation_rpar = false +resharper_wrap_before_linq_expression = false +resharper_wrap_before_primary_constructor_declaration_lpar = false +resharper_wrap_before_primary_constructor_declaration_rpar = false +resharper_wrap_before_ternary_opsigns = true +resharper_wrap_before_type_parameter_langle = false +resharper_wrap_braced_init_list_style = wrap_if_long +resharper_wrap_chained_binary_expressions = wrap_if_long +resharper_wrap_chained_binary_patterns = wrap_if_long +resharper_wrap_chained_method_calls = wrap_if_long +resharper_wrap_ctor_initializer_style = wrap_if_long +resharper_wrap_enumeration_style = chop_if_long +resharper_wrap_enum_declaration = chop_always +resharper_wrap_extends_list_style = wrap_if_long +resharper_wrap_for_stmt_header_style = chop_if_long +resharper_wrap_list_pattern = wrap_if_long +resharper_wrap_multiple_declaration_style = chop_if_long +resharper_wrap_multiple_type_parameter_constraints_style = chop_if_long +resharper_wrap_object_and_collection_initializer_style = chop_if_long +resharper_wrap_parameters_style = wrap_if_long +resharper_wrap_primary_constructor_parameters_style = chop_if_long +resharper_wrap_property_pattern = chop_if_long +resharper_wrap_switch_expression = chop_always +resharper_wrap_ternary_expr_style = chop_if_long +resharper_wrap_verbatim_interpolated_strings = no_wrap +resharper_xmldoc_attribute_indent = single_indent +resharper_xmldoc_insert_final_newline = false +resharper_xmldoc_linebreak_before_elements = summary, remarks, example, returns, param, typeparam, value, para +resharper_xmldoc_max_blank_lines_between_tags = 0 +resharper_xmldoc_max_line_length = 120 +resharper_xmldoc_pi_attribute_style = do_not_touch +resharper_xmldoc_space_before_self_closing = true +resharper_xmldoc_wrap_lines = true +resharper_xmldoc_wrap_tags_and_pi = true +resharper_xmldoc_wrap_text = true +resharper_xml_attribute_indent = align_by_first_attribute +resharper_xml_insert_final_newline = false +resharper_xml_linebreak_before_elements = +resharper_xml_max_blank_lines_between_tags = 2 +resharper_xml_max_line_length = 120 +resharper_xml_pi_attribute_style = do_not_touch +resharper_xml_space_before_self_closing = true +resharper_xml_wrap_lines = true +resharper_xml_wrap_tags_and_pi = true +resharper_xml_wrap_text = false + +# ReSharper inspection severities +resharper_access_rights_in_text_highlighting = warning +resharper_access_to_disposed_closure_highlighting = warning +resharper_access_to_for_each_variable_in_closure_highlighting = warning +resharper_access_to_modified_closure_highlighting = warning +resharper_access_to_static_member_via_derived_type_highlighting = warning +resharper_address_of_marshal_by_ref_object_highlighting = warning +resharper_all_underscore_local_parameter_name_highlighting = warning +resharper_angular_html_banana_highlighting = warning +resharper_annotate_can_be_null_parameter_highlighting = none +resharper_annotate_can_be_null_type_member_highlighting = none +resharper_annotate_not_null_parameter_highlighting = none +resharper_annotate_not_null_type_member_highlighting = none +resharper_annotation_conflict_in_hierarchy_highlighting = warning +resharper_annotation_redundancy_at_value_type_highlighting = warning +resharper_annotation_redundancy_in_hierarchy_highlighting = warning +resharper_append_to_collection_expression_highlighting = suggestion +resharper_arguments_style_anonymous_function_highlighting = none +resharper_arguments_style_literal_highlighting = none +resharper_arguments_style_named_expression_highlighting = none +resharper_arguments_style_other_highlighting = none +resharper_arguments_style_string_literal_highlighting = none +resharper_arrange_accessor_owner_body_highlighting = suggestion +resharper_arrange_attributes_highlighting = none +resharper_arrange_constructor_or_destructor_body_highlighting = none +resharper_arrange_default_value_when_type_evident_highlighting = suggestion +resharper_arrange_default_value_when_type_not_evident_highlighting = hint +resharper_arrange_local_function_body_highlighting = none +resharper_arrange_method_or_operator_body_highlighting = none +resharper_arrange_namespace_body_highlighting = hint +resharper_arrange_null_checking_pattern_highlighting = hint +resharper_arrange_object_creation_when_type_evident_highlighting = suggestion +resharper_arrange_object_creation_when_type_not_evident_highlighting = hint +resharper_arrange_redundant_parentheses_highlighting = hint +resharper_arrange_static_member_qualifier_highlighting = hint +resharper_arrange_this_qualifier_highlighting = hint +resharper_arrange_trailing_comma_in_multiline_lists_highlighting = hint +resharper_arrange_trailing_comma_in_singleline_lists_highlighting = hint +resharper_arrange_type_member_modifiers_highlighting = hint +resharper_arrange_type_modifiers_highlighting = hint +resharper_arrange_var_keywords_in_deconstructing_declaration_highlighting = suggestion +resharper_asp_content_placeholder_not_resolved_highlighting = error +resharper_asp_custom_page_parser_filter_type_highlighting = warning +resharper_asp_dead_code_highlighting = warning +resharper_asp_entity_highlighting = warning +resharper_asp_image_highlighting = warning +resharper_asp_invalid_control_type_highlighting = error +resharper_asp_not_resolved_highlighting = error +resharper_asp_ods_method_reference_resolve_error_highlighting = error +resharper_asp_resolve_warning_highlighting = warning +resharper_asp_skin_not_resolved_highlighting = error +resharper_asp_tag_attribute_with_optional_value_highlighting = warning +resharper_asp_theme_not_resolved_highlighting = error +resharper_asp_unused_register_directive_highlighting_highlighting = warning +resharper_asp_warning_highlighting = warning +resharper_assignment_instead_of_discard_highlighting = warning +resharper_assignment_in_conditional_expression_highlighting = warning +resharper_assignment_is_fully_discarded_highlighting = warning +resharper_assign_null_to_not_null_attribute_highlighting = warning +resharper_asxx_path_error_highlighting = warning +resharper_async_iterator_invocation_without_await_foreach_highlighting = warning +resharper_async_void_lambda_highlighting = warning +resharper_async_void_method_highlighting = none +resharper_auto_property_can_be_made_get_only_global_highlighting = suggestion +resharper_auto_property_can_be_made_get_only_local_highlighting = suggestion +resharper_azure_function_app_timer_trigger_cron_expression_highlighting = error +resharper_bad_attribute_brackets_spaces_highlighting = none +resharper_bad_braces_spaces_highlighting = none +resharper_bad_child_statement_indent_highlighting = warning +resharper_bad_colon_spaces_highlighting = none +resharper_bad_comma_spaces_highlighting = none +resharper_bad_control_braces_indent_highlighting = suggestion +resharper_bad_control_braces_line_breaks_highlighting = none +resharper_bad_declaration_braces_indent_highlighting = none +resharper_bad_declaration_braces_line_breaks_highlighting = none +resharper_bad_empty_braces_line_breaks_highlighting = none +resharper_bad_expression_braces_indent_highlighting = none +resharper_bad_expression_braces_line_breaks_highlighting = none +resharper_bad_generic_brackets_spaces_highlighting = none +resharper_bad_indent_highlighting = none +resharper_bad_linq_line_breaks_highlighting = none +resharper_bad_list_line_breaks_highlighting = none +resharper_bad_member_access_spaces_highlighting = none +resharper_bad_namespace_braces_indent_highlighting = none +resharper_bad_parens_line_breaks_highlighting = none +resharper_bad_parens_spaces_highlighting = none +resharper_bad_preprocessor_indent_highlighting = none +resharper_bad_semicolon_spaces_highlighting = none +resharper_bad_spaces_after_keyword_highlighting = none +resharper_bad_square_brackets_spaces_highlighting = none +resharper_bad_switch_braces_indent_highlighting = none +resharper_bad_symbol_spaces_highlighting = none +resharper_base_member_has_params_highlighting = warning +resharper_base_method_call_with_default_parameter_highlighting = warning +resharper_base_object_equals_is_object_equals_highlighting = warning +resharper_base_object_get_hash_code_call_in_get_hash_code_highlighting = warning +resharper_bitwise_operator_on_enum_without_flags_highlighting = warning +resharper_blazor_editor_required_highlighting = warning +resharper_built_in_type_reference_style_for_member_access_highlighting = hint +resharper_built_in_type_reference_style_highlighting = hint +resharper_by_ref_argument_is_volatile_field_highlighting = warning +resharper_cannot_apply_equality_operator_to_type_highlighting = warning +resharper_can_simplify_dictionary_lookup_with_try_add_highlighting = suggestion +resharper_can_simplify_dictionary_lookup_with_try_get_value_highlighting = suggestion +resharper_can_simplify_dictionary_removing_with_single_call_highlighting = suggestion +resharper_can_simplify_dictionary_try_get_value_with_get_value_or_default_highlighting = suggestion +resharper_can_simplify_set_adding_with_single_call_highlighting = suggestion +resharper_center_tag_is_obsolete_highlighting = warning +resharper_check_for_reference_equality_instead_1_highlighting = suggestion +resharper_check_for_reference_equality_instead_2_highlighting = suggestion +resharper_check_for_reference_equality_instead_3_highlighting = suggestion +resharper_check_for_reference_equality_instead_4_highlighting = suggestion +resharper_check_namespace_highlighting = warning +resharper_class_cannot_be_instantiated_highlighting = warning +resharper_class_can_be_sealed_global_highlighting = none +resharper_class_can_be_sealed_local_highlighting = none +resharper_class_never_instantiated_global_highlighting = suggestion +resharper_class_never_instantiated_local_highlighting = suggestion +resharper_class_with_virtual_members_never_inherited_global_highlighting = suggestion +resharper_class_with_virtual_members_never_inherited_local_highlighting = suggestion +resharper_clear_attribute_is_obsolete_all_highlighting = warning +resharper_clear_attribute_is_obsolete_highlighting = warning +resharper_collection_never_queried_global_highlighting = warning +resharper_collection_never_queried_local_highlighting = warning +resharper_collection_never_updated_global_highlighting = warning +resharper_collection_never_updated_local_highlighting = warning +resharper_comment_typo_highlighting = suggestion +resharper_compare_non_constrained_generic_with_null_highlighting = none +resharper_compare_of_floats_by_equality_operator_highlighting = warning +resharper_conditional_access_qualifier_is_non_nullable_according_to_api_contract_highlighting = warning +resharper_conditional_ternary_equal_branch_highlighting = warning +resharper_condition_is_always_true_or_false_according_to_nullable_api_contract_highlighting = warning +resharper_condition_is_always_true_or_false_highlighting = warning +resharper_confusing_char_as_integer_in_constructor_highlighting = warning +resharper_constant_conditional_access_qualifier_highlighting = warning +resharper_constant_null_coalescing_condition_highlighting = warning +resharper_consteval_if_is_always_constant_highlighting = warning +resharper_constructor_initializer_loop_highlighting = warning +resharper_constructor_with_must_dispose_resource_attribute_base_is_not_annotated_highlighting = warning +resharper_container_annotation_redundancy_highlighting = warning +resharper_context_value_is_provided_highlighting = none +resharper_contract_annotation_not_parsed_highlighting = warning +resharper_convert_closure_to_method_group_highlighting = suggestion +resharper_convert_conditional_ternary_expression_to_switch_expression_highlighting = hint +resharper_convert_constructor_to_member_initializers_highlighting = suggestion +resharper_convert_if_do_to_while_highlighting = suggestion +resharper_convert_if_statement_to_conditional_ternary_expression_highlighting = suggestion +resharper_convert_if_statement_to_null_coalescing_assignment_highlighting = suggestion +resharper_convert_if_statement_to_null_coalescing_expression_highlighting = suggestion +resharper_convert_if_statement_to_return_statement_highlighting = hint +resharper_convert_if_statement_to_switch_statement_highlighting = hint +resharper_convert_if_to_or_expression_highlighting = suggestion +resharper_convert_nullable_to_short_form_highlighting = suggestion +resharper_convert_switch_statement_to_switch_expression_highlighting = hint +resharper_convert_to_auto_property_highlighting = suggestion +resharper_convert_to_auto_property_when_possible_highlighting = hint +resharper_convert_to_auto_property_with_private_setter_highlighting = hint +resharper_convert_to_compound_assignment_highlighting = hint +resharper_convert_to_constant_global_highlighting = hint +resharper_convert_to_constant_local_highlighting = hint +resharper_convert_to_lambda_expression_highlighting = suggestion +resharper_convert_to_local_function_highlighting = suggestion +resharper_convert_to_null_coalescing_compound_assignment_highlighting = suggestion +resharper_convert_to_primary_constructor_highlighting = suggestion +resharper_convert_to_static_class_highlighting = suggestion +resharper_convert_to_using_declaration_highlighting = suggestion +resharper_convert_to_vb_auto_property_highlighting = suggestion +resharper_convert_to_vb_auto_property_when_possible_highlighting = hint +resharper_convert_to_vb_auto_property_with_private_setter_highlighting = hint +resharper_convert_type_check_pattern_to_null_check_highlighting = warning +resharper_convert_type_check_to_null_check_highlighting = warning +resharper_co_variant_array_conversion_highlighting = warning +resharper_cpp_abstract_class_without_specifier_highlighting = warning +resharper_cpp_abstract_final_class_highlighting = warning +resharper_cpp_abstract_virtual_function_call_in_ctor_highlighting = error +resharper_cpp_access_specifier_with_no_declarations_highlighting = suggestion +resharper_cpp_assigned_value_is_never_used_highlighting = warning +resharper_cpp_awaiter_type_is_not_class_highlighting = warning +resharper_cpp_bad_angle_brackets_spaces_highlighting = none +resharper_cpp_bad_braces_spaces_highlighting = none +resharper_cpp_bad_child_statement_indent_highlighting = none +resharper_cpp_bad_colon_spaces_highlighting = none +resharper_cpp_bad_comma_spaces_highlighting = none +resharper_cpp_bad_control_braces_indent_highlighting = none +resharper_cpp_bad_control_braces_line_breaks_highlighting = none +resharper_cpp_bad_declaration_braces_indent_highlighting = none +resharper_cpp_bad_declaration_braces_line_breaks_highlighting = none +resharper_cpp_bad_empty_braces_line_breaks_highlighting = none +resharper_cpp_bad_expression_braces_indent_highlighting = none +resharper_cpp_bad_expression_braces_line_breaks_highlighting = none +resharper_cpp_bad_indent_highlighting = none +resharper_cpp_bad_list_line_breaks_highlighting = none +resharper_cpp_bad_member_access_spaces_highlighting = none +resharper_cpp_bad_namespace_braces_indent_highlighting = none +resharper_cpp_bad_parens_line_breaks_highlighting = none +resharper_cpp_bad_parens_spaces_highlighting = none +resharper_cpp_bad_semicolon_spaces_highlighting = none +resharper_cpp_bad_spaces_after_keyword_highlighting = none +resharper_cpp_bad_square_brackets_spaces_highlighting = none +resharper_cpp_bad_switch_braces_indent_highlighting = none +resharper_cpp_bad_symbol_spaces_highlighting = none +resharper_cpp_boolean_increment_expression_highlighting = warning +resharper_cpp_boost_format_bad_code_highlighting = warning +resharper_cpp_boost_format_legacy_code_highlighting = suggestion +resharper_cpp_boost_format_mixed_args_highlighting = error +resharper_cpp_boost_format_too_few_args_highlighting = error +resharper_cpp_boost_format_too_many_args_highlighting = warning +resharper_cpp_bound_to_delegate_method_is_not_marked_as_u_function_highlighting = warning +resharper_cpp_clang_tidy_abseil_cleanup_ctad_highlighting = none +resharper_cpp_clang_tidy_abseil_duration_addition_highlighting = none +resharper_cpp_clang_tidy_abseil_duration_comparison_highlighting = none +resharper_cpp_clang_tidy_abseil_duration_conversion_cast_highlighting = none +resharper_cpp_clang_tidy_abseil_duration_division_highlighting = none +resharper_cpp_clang_tidy_abseil_duration_factory_float_highlighting = none +resharper_cpp_clang_tidy_abseil_duration_factory_scale_highlighting = none +resharper_cpp_clang_tidy_abseil_duration_subtraction_highlighting = none +resharper_cpp_clang_tidy_abseil_duration_unnecessary_conversion_highlighting = none +resharper_cpp_clang_tidy_abseil_faster_strsplit_delimiter_highlighting = none +resharper_cpp_clang_tidy_abseil_no_internal_dependencies_highlighting = none +resharper_cpp_clang_tidy_abseil_no_namespace_highlighting = none +resharper_cpp_clang_tidy_abseil_redundant_strcat_calls_highlighting = none +resharper_cpp_clang_tidy_abseil_string_find_startswith_highlighting = none +resharper_cpp_clang_tidy_abseil_string_find_str_contains_highlighting = none +resharper_cpp_clang_tidy_abseil_str_cat_append_highlighting = none +resharper_cpp_clang_tidy_abseil_time_comparison_highlighting = none +resharper_cpp_clang_tidy_abseil_time_subtraction_highlighting = none +resharper_cpp_clang_tidy_abseil_upgrade_duration_conversions_highlighting = none +resharper_cpp_clang_tidy_altera_id_dependent_backward_branch_highlighting = none +resharper_cpp_clang_tidy_altera_kernel_name_restriction_highlighting = none +resharper_cpp_clang_tidy_altera_single_work_item_barrier_highlighting = none +resharper_cpp_clang_tidy_altera_struct_pack_align_highlighting = none +resharper_cpp_clang_tidy_altera_unroll_loops_highlighting = none +resharper_cpp_clang_tidy_android_cloexec_accept4_highlighting = none +resharper_cpp_clang_tidy_android_cloexec_accept_highlighting = none +resharper_cpp_clang_tidy_android_cloexec_creat_highlighting = none +resharper_cpp_clang_tidy_android_cloexec_dup_highlighting = none +resharper_cpp_clang_tidy_android_cloexec_epoll_create1_highlighting = none +resharper_cpp_clang_tidy_android_cloexec_epoll_create_highlighting = none +resharper_cpp_clang_tidy_android_cloexec_fopen_highlighting = none +resharper_cpp_clang_tidy_android_cloexec_inotify_init1_highlighting = none +resharper_cpp_clang_tidy_android_cloexec_inotify_init_highlighting = none +resharper_cpp_clang_tidy_android_cloexec_memfd_create_highlighting = none +resharper_cpp_clang_tidy_android_cloexec_open_highlighting = none +resharper_cpp_clang_tidy_android_cloexec_pipe2_highlighting = none +resharper_cpp_clang_tidy_android_cloexec_pipe_highlighting = none +resharper_cpp_clang_tidy_android_cloexec_socket_highlighting = none +resharper_cpp_clang_tidy_android_comparison_in_temp_failure_retry_highlighting = none +resharper_cpp_clang_tidy_boost_use_to_string_highlighting = suggestion +resharper_cpp_clang_tidy_bugprone_argument_comment_highlighting = suggestion +resharper_cpp_clang_tidy_bugprone_assert_side_effect_highlighting = warning +resharper_cpp_clang_tidy_bugprone_assignment_in_if_condition_highlighting = none +resharper_cpp_clang_tidy_bugprone_bad_signal_to_kill_thread_highlighting = warning +resharper_cpp_clang_tidy_bugprone_bool_pointer_implicit_conversion_highlighting = none +resharper_cpp_clang_tidy_bugprone_branch_clone_highlighting = warning +resharper_cpp_clang_tidy_bugprone_copy_constructor_init_highlighting = warning +resharper_cpp_clang_tidy_bugprone_dangling_handle_highlighting = warning +resharper_cpp_clang_tidy_bugprone_dynamic_static_initializers_highlighting = warning +resharper_cpp_clang_tidy_bugprone_easily_swappable_parameters_highlighting = none +resharper_cpp_clang_tidy_bugprone_empty_catch_highlighting = warning +resharper_cpp_clang_tidy_bugprone_exception_escape_highlighting = none +resharper_cpp_clang_tidy_bugprone_fold_init_type_highlighting = warning +resharper_cpp_clang_tidy_bugprone_forwarding_reference_overload_highlighting = warning +resharper_cpp_clang_tidy_bugprone_forward_declaration_namespace_highlighting = warning +resharper_cpp_clang_tidy_bugprone_implicit_widening_of_multiplication_result_highlighting = warning +resharper_cpp_clang_tidy_bugprone_inaccurate_erase_highlighting = warning +resharper_cpp_clang_tidy_bugprone_incorrect_roundings_highlighting = warning +resharper_cpp_clang_tidy_bugprone_infinite_loop_highlighting = warning +resharper_cpp_clang_tidy_bugprone_integer_division_highlighting = warning +resharper_cpp_clang_tidy_bugprone_lambda_function_name_highlighting = warning +resharper_cpp_clang_tidy_bugprone_macro_parentheses_highlighting = warning +resharper_cpp_clang_tidy_bugprone_macro_repeated_side_effects_highlighting = warning +resharper_cpp_clang_tidy_bugprone_misplaced_operator_in_strlen_in_alloc_highlighting = warning +resharper_cpp_clang_tidy_bugprone_misplaced_pointer_arithmetic_in_alloc_highlighting = warning +resharper_cpp_clang_tidy_bugprone_misplaced_widening_cast_highlighting = warning +resharper_cpp_clang_tidy_bugprone_move_forwarding_reference_highlighting = warning +resharper_cpp_clang_tidy_bugprone_multiple_new_in_one_expression_highlighting = warning +resharper_cpp_clang_tidy_bugprone_multiple_statement_macro_highlighting = warning +resharper_cpp_clang_tidy_bugprone_narrowing_conversions_highlighting = warning +resharper_cpp_clang_tidy_bugprone_non_zero_enum_to_bool_conversion_highlighting = warning +resharper_cpp_clang_tidy_bugprone_not_null_terminated_result_highlighting = warning +resharper_cpp_clang_tidy_bugprone_no_escape_highlighting = warning +resharper_cpp_clang_tidy_bugprone_parent_virtual_call_highlighting = warning +resharper_cpp_clang_tidy_bugprone_posix_return_highlighting = warning +resharper_cpp_clang_tidy_bugprone_redundant_branch_condition_highlighting = warning +resharper_cpp_clang_tidy_bugprone_reserved_identifier_highlighting = warning +resharper_cpp_clang_tidy_bugprone_shared_ptr_array_mismatch_highlighting = warning +resharper_cpp_clang_tidy_bugprone_signal_handler_highlighting = warning +resharper_cpp_clang_tidy_bugprone_signed_char_misuse_highlighting = warning +resharper_cpp_clang_tidy_bugprone_sizeof_container_highlighting = warning +resharper_cpp_clang_tidy_bugprone_sizeof_expression_highlighting = warning +resharper_cpp_clang_tidy_bugprone_spuriously_wake_up_functions_highlighting = warning +resharper_cpp_clang_tidy_bugprone_standalone_empty_highlighting = warning +resharper_cpp_clang_tidy_bugprone_stringview_nullptr_highlighting = warning +resharper_cpp_clang_tidy_bugprone_string_constructor_highlighting = warning +resharper_cpp_clang_tidy_bugprone_string_integer_assignment_highlighting = warning +resharper_cpp_clang_tidy_bugprone_string_literal_with_embedded_nul_highlighting = warning +resharper_cpp_clang_tidy_bugprone_suspicious_enum_usage_highlighting = warning +resharper_cpp_clang_tidy_bugprone_suspicious_include_highlighting = warning +resharper_cpp_clang_tidy_bugprone_suspicious_memory_comparison_highlighting = warning +resharper_cpp_clang_tidy_bugprone_suspicious_memset_usage_highlighting = warning +resharper_cpp_clang_tidy_bugprone_suspicious_missing_comma_highlighting = warning +resharper_cpp_clang_tidy_bugprone_suspicious_realloc_usage_highlighting = warning +resharper_cpp_clang_tidy_bugprone_suspicious_semicolon_highlighting = warning +resharper_cpp_clang_tidy_bugprone_suspicious_string_compare_highlighting = warning +resharper_cpp_clang_tidy_bugprone_swapped_arguments_highlighting = warning +resharper_cpp_clang_tidy_bugprone_switch_missing_default_case_highlighting = none +resharper_cpp_clang_tidy_bugprone_terminating_continue_highlighting = warning +resharper_cpp_clang_tidy_bugprone_throw_keyword_missing_highlighting = warning +resharper_cpp_clang_tidy_bugprone_too_small_loop_variable_highlighting = warning +resharper_cpp_clang_tidy_bugprone_unchecked_optional_access_highlighting = warning +resharper_cpp_clang_tidy_bugprone_undefined_memory_manipulation_highlighting = warning +resharper_cpp_clang_tidy_bugprone_undelegated_constructor_highlighting = warning +resharper_cpp_clang_tidy_bugprone_unhandled_exception_at_new_highlighting = none +resharper_cpp_clang_tidy_bugprone_unhandled_self_assignment_highlighting = warning +resharper_cpp_clang_tidy_bugprone_unique_ptr_array_mismatch_highlighting = warning +resharper_cpp_clang_tidy_bugprone_unsafe_functions_highlighting = warning +resharper_cpp_clang_tidy_bugprone_unused_raii_highlighting = warning +resharper_cpp_clang_tidy_bugprone_unused_return_value_highlighting = warning +resharper_cpp_clang_tidy_bugprone_use_after_move_highlighting = warning +resharper_cpp_clang_tidy_bugprone_virtual_near_miss_highlighting = suggestion +resharper_cpp_clang_tidy_cert_con36_c_highlighting = none +resharper_cpp_clang_tidy_cert_con54_cpp_highlighting = none +resharper_cpp_clang_tidy_cert_dcl03_c_highlighting = none +resharper_cpp_clang_tidy_cert_dcl16_c_highlighting = none +resharper_cpp_clang_tidy_cert_dcl21_cpp_highlighting = none +resharper_cpp_clang_tidy_cert_dcl37_c_highlighting = none +resharper_cpp_clang_tidy_cert_dcl50_cpp_highlighting = none +resharper_cpp_clang_tidy_cert_dcl51_cpp_highlighting = none +resharper_cpp_clang_tidy_cert_dcl54_cpp_highlighting = none +resharper_cpp_clang_tidy_cert_dcl58_cpp_highlighting = warning +resharper_cpp_clang_tidy_cert_dcl59_cpp_highlighting = none +resharper_cpp_clang_tidy_cert_env33_c_highlighting = none +resharper_cpp_clang_tidy_cert_err09_cpp_highlighting = none +resharper_cpp_clang_tidy_cert_err33_c_highlighting = warning +resharper_cpp_clang_tidy_cert_err34_c_highlighting = suggestion +resharper_cpp_clang_tidy_cert_err52_cpp_highlighting = none +resharper_cpp_clang_tidy_cert_err58_cpp_highlighting = none +resharper_cpp_clang_tidy_cert_err60_cpp_highlighting = warning +resharper_cpp_clang_tidy_cert_err61_cpp_highlighting = none +resharper_cpp_clang_tidy_cert_exp42_c_highlighting = none +resharper_cpp_clang_tidy_cert_fio38_c_highlighting = none +resharper_cpp_clang_tidy_cert_flp30_c_highlighting = warning +resharper_cpp_clang_tidy_cert_flp37_c_highlighting = none +resharper_cpp_clang_tidy_cert_mem57_cpp_highlighting = warning +resharper_cpp_clang_tidy_cert_msc24_c_highlighting = none +resharper_cpp_clang_tidy_cert_msc30_c_highlighting = none +resharper_cpp_clang_tidy_cert_msc32_c_highlighting = none +resharper_cpp_clang_tidy_cert_msc33_c_highlighting = none +resharper_cpp_clang_tidy_cert_msc50_cpp_highlighting = none +resharper_cpp_clang_tidy_cert_msc51_cpp_highlighting = warning +resharper_cpp_clang_tidy_cert_msc54_cpp_highlighting = warning +resharper_cpp_clang_tidy_cert_oop11_cpp_highlighting = none +resharper_cpp_clang_tidy_cert_oop54_cpp_highlighting = none +resharper_cpp_clang_tidy_cert_oop57_cpp_highlighting = warning +resharper_cpp_clang_tidy_cert_oop58_cpp_highlighting = warning +resharper_cpp_clang_tidy_cert_pos44_c_highlighting = none +resharper_cpp_clang_tidy_cert_pos47_c_highlighting = none +resharper_cpp_clang_tidy_cert_sig30_c_highlighting = none +resharper_cpp_clang_tidy_cert_str34_c_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_errno_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_google_g_test_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_llvm_cast_value_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_llvm_return_value_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_trust_nonnull_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_api_modeling_trust_returns_nonnull_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_builtin_builtin_functions_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_builtin_no_return_functions_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_call_and_message_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_call_and_message_modeling_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_divide_zero_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_dynamic_type_propagation_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_nonnil_string_constants_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_non_null_param_checker_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_null_dereference_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_stack_address_escape_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_stack_addr_escape_base_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_undefined_binary_operator_result_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_array_subscript_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_assign_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_branch_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_captured_block_variable_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_new_array_size_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_undef_return_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_core_vla_size_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_inner_pointer_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_move_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_new_delete_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_new_delete_leaks_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_placement_new_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_pure_virtual_call_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_self_assignment_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_smart_ptr_modeling_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_string_checker_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_cplusplus_virtual_call_modeling_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_deadcode_dead_stores_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_fuchsia_handle_checker_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_nullability_nullability_base_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_nullability_nullable_dereferenced_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_nullability_nullable_passed_to_nonnull_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_nullability_nullable_returned_from_nonnull_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_nullability_null_passed_to_nonnull_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_nullability_null_returned_from_nonnull_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_optin_cplusplus_uninitialized_object_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_optin_cplusplus_virtual_call_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_optin_mpi_mpi_checker_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_optin_osx_cocoa_localizability_empty_localization_context_checker_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_optin_osx_cocoa_localizability_non_localized_string_checker_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_optin_osx_os_object_c_style_cast_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_optin_performance_gcd_antipattern_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_optin_performance_padding_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_optin_portability_unix_api_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_api_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_at_sync_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_autorelease_write_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_class_release_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_dealloc_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_incompatible_method_types_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_loops_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_missing_super_call_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_nil_arg_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_non_nil_return_value_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_ns_autorelease_pool_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_ns_error_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_obj_c_generics_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_retain_count_base_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_retain_count_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_run_loop_autorelease_leak_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_self_init_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_super_dealloc_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_unused_ivars_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_variadic_method_types_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_cf_error_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_cf_number_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_cf_retain_release_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_containers_out_of_bounds_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_containers_pointer_sized_values_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_mig_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_ns_or_cf_error_deref_checker_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_number_object_conversion_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_obj_c_property_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_os_object_retain_count_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_osx_sec_keychain_api_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_float_loop_counter_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_bcmp_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_bcopy_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_bzero_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_decode_value_of_obj_c_type_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_deprecated_or_unsafe_buffer_handling_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_getpw_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_gets_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_mkstemp_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_mktemp_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_rand_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_security_syntax_checker_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_strcpy_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_unchecked_return_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_vfork_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_unix_api_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_unix_cstring_bad_size_arg_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_unix_cstring_c_string_modeling_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_unix_cstring_null_arg_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_unix_dynamic_memory_modeling_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_unix_malloc_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_unix_malloc_sizeof_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_unix_mismatched_deallocator_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_unix_vfork_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_valist_copy_to_self_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_valist_uninitialized_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_valist_unterminated_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_valist_valist_base_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_webkit_no_uncounted_member_checker_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_webkit_ref_cntbl_base_virtual_dtor_highlighting = none +resharper_cpp_clang_tidy_clang_analyzer_webkit_uncounted_lambda_captures_checker_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_absolute_value_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_abstract_final_class_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_abstract_vbase_init_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_address_of_packed_member_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_address_of_temporary_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_aix_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_align_mismatch_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_alloca_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_alloca_with_align_alignof_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_always_inline_coroutine_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_delete_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_ellipsis_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_macro_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_member_template_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_reversed_operator_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_analyzer_incompatible_plugin_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_anonymous_pack_parens_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_anon_enum_enum_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_bridge_casts_disallowed_in_nonarc_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_maybe_repeated_use_of_weak_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_non_pod_memaccess_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_perform_selector_leaks_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_repeated_use_of_weak_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_retain_cycles_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_arc_unsafe_retained_assign_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_argument_outside_range_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_argument_undefined_behaviour_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_array_bounds_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_array_bounds_pointer_arithmetic_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_array_parameter_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_asm_operand_widths_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_assign_enum_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_assume_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_atimport_in_framework_header_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_atomic_access_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_atomic_alignment_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_atomic_implicit_seq_cst_highlighting = suggestion +resharper_cpp_clang_tidy_clang_diagnostic_atomic_memory_ordering_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_atomic_property_with_user_defined_accessor_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_attribute_packed_for_bitfield_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_attribute_warning_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_at_protocol_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_auto_disable_vptr_sanitizer_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_auto_import_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_auto_storage_class_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_auto_var_id_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_availability_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_avr_rtlib_linking_quirks_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_backslash_newline_escape_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_bad_function_cast_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_binding_in_condition_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_bind_to_temporary_copy_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_bitfield_constant_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_bitfield_enum_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_bitfield_width_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_bitwise_conditional_parentheses_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_bitwise_instead_of_logical_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_bitwise_op_parentheses_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_bit_int_extension_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_block_capture_autoreleasing_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_bool_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_bool_operation_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_braced_scalar_init_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_branch_protection_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_bridge_cast_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_builtin_assume_aligned_alignment_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_builtin_macro_redefined_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_builtin_memcpy_chk_size_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_builtin_requires_header_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_c11_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_c2x_compat_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_c2x_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_c99_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_c99_designator_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_c99_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_called_once_parameter_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_call_to_pure_virtual_from_ctor_dtor_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_align_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_calling_convention_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_function_type_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_function_type_strict_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_of_sel_type_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_qual_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cast_qual_unrelated_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cf_string_literal_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_char_subscripts_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_clang_cl_pch_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_class_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_class_varargs_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cmse_union_leak_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_comma_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_comment_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_compare_distinct_pointer_types_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_completion_handler_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_complex_component_init_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_compound_token_split_by_macro_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_compound_token_split_by_space_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_compound_token_split_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_conditional_type_mismatch_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_conditional_uninitialized_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_config_macros_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_constant_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_constant_evaluated_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_constant_logical_operand_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_constexpr_not_const_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_consumed_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_coroutine_missing_unhandled_exception_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_coro_non_aligned_allocation_function_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_covered_switch_default_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_deprecated_writable_strings_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_reserved_user_defined_literal_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_extra_semi_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_inline_namespace_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_long_long_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp11_narrowing_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp14_attribute_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp14_binary_literal_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp14_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp14_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp14_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp17_attribute_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp17_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp17_compat_mangling_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp17_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp17_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp20_attribute_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp20_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp20_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp20_designator_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp20_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp23_default_comp_relaxed_constexpr_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp23_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp26_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp2a_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp2a_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp2b_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp2c_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_bind_to_temporary_copy_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_extra_semi_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_local_type_template_args_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_unnamed_type_template_args_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_compat_binary_literal_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_cpp17_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_cpp17_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cpp_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cstring_format_directive_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_ctad_maybe_unsupported_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_ctu_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_cuda_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_custom_atomic_properties_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_cxx_attribute_extension_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_else_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_field_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_gsl_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_dangling_initializer_list_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_darwin_sdk_settings_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_date_time_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_dealloc_in_category_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_debug_compression_unavailable_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_declaration_after_statement_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_defaulted_function_deleted_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_delegating_ctor_cycles_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_delete_abstract_non_virtual_dtor_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_delete_incomplete_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_delete_non_abstract_non_virtual_dtor_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_delete_non_virtual_dtor_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_delimited_escape_sequence_extension_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_altivec_src_compat_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_anon_enum_enum_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_array_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_attributes_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_builtins_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_comma_subscript_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_with_dtor_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_with_user_provided_copy_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_with_user_provided_dtor_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_coroutine_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_declarations_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_dynamic_exception_spec_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_compare_conditional_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_enum_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_float_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_implementations_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_increment_bool_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_literal_operator_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_non_prototype_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_objc_isa_usage_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_objc_pointer_introspection_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_objc_pointer_introspection_perform_selector_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_pragma_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_redundant_constexpr_static_def_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_register_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_static_analyzer_flag_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_this_capture_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_type_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecated_volatile_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_deprecate_lax_vec_conv_all_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_direct_ivar_access_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_disabled_macro_expansion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_distributed_object_modifiers_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_division_by_zero_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_dllexport_explicit_instantiation_decl_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_dllimport_static_field_def_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_dll_attribute_on_redeclaration_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_documentation_deprecated_sync_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_documentation_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_documentation_html_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_documentation_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_documentation_unknown_command_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_dollar_in_identifier_extension_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_double_promotion_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_dtor_name_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_dtor_typedef_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_duplicate_decl_specifier_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_duplicate_enum_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_duplicate_method_arg_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_duplicate_method_match_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_duplicate_protocol_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_dxil_validation_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_dynamic_class_memaccess_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_dynamic_exception_spec_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_eager_load_cxx_named_modules_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_embedded_directive_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_empty_body_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_empty_decomposition_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_empty_init_stmt_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_empty_translation_unit_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_encode_type_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_compare_conditional_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_compare_switch_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_constexpr_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_enum_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_float_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_enum_too_large_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_error_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_exceptions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_excess_initializers_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_exit_time_destructors_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_expansion_to_defined_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_experimental_header_units_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_explicit_initialize_call_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_explicit_ownership_type_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_export_unnamed_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_extern_c_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_extern_initializer_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_extra_qualification_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_extra_semi_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_extra_semi_stmt_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_extra_tokens_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_final_dtor_non_final_class_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_final_macro_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_fixed_enum_extension_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_fixed_point_overflow_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_flag_enum_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_flexible_array_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_float_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_float_equal_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_float_overflow_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_float_zero_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_format_extra_args_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_format_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_format_insufficient_args_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_format_invalid_specifier_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_format_nonliteral_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_format_non_iso_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_format_pedantic_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_format_security_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_format_type_confusion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_format_zero_length_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_fortify_source_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_for_loop_analysis_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_four_char_constants_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_framework_include_private_from_public_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_frame_address_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_frame_larger_than_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_free_nonheap_object_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_function_def_in_objc_container_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_function_multiversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_future_attribute_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gcc_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_generic_type_extension_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_global_constructors_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_global_isel_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_alignof_expression_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_anonymous_struct_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_gnu_array_member_paren_init_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_auto_type_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_binary_literal_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_case_range_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_complex_integer_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_compound_literal_initializer_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_conditional_omitted_operand_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_designator_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_empty_initializer_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_empty_struct_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_flexible_array_initializer_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_flexible_array_union_member_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_folding_constant_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_imaginary_constant_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_include_next_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_inline_cpp_without_extern_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_label_as_value_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_line_marker_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_null_pointer_arithmetic_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_offsetof_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_pointer_arith_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_redeclared_enum_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_statement_expression_from_macro_expansion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_statement_expression_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_static_float_init_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_string_literal_operator_template_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_union_cast_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_variable_sized_type_not_at_end_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gnu_zero_variadic_macro_arguments_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_gpu_maybe_wrong_side_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_header_guard_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_header_hygiene_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_hip_omp_target_directives_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_hip_only_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_hlsl_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_idiomatic_parentheses_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_ignored_attributes_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_ignored_availability_without_sdk_settings_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_ignored_optimization_argument_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_ignored_pragmas_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_ignored_pragma_intrinsic_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_ignored_pragma_optimize_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_ignored_qualifiers_highlighting = suggestion +resharper_cpp_clang_tidy_clang_diagnostic_ignored_reference_qualifiers_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_implicitly_unsigned_literal_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_atomic_properties_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_const_int_float_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_conversion_floating_point_to_bool_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_exception_spec_mismatch_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_fallthrough_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_fallthrough_per_function_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_fixed_point_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_float_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_function_declaration_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_float_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_implicit_retain_self_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_import_preprocessor_directive_pedantic_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_inaccessible_base_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_include_next_absolute_path_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_include_next_outside_header_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_exception_spec_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_function_pointer_types_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_function_pointer_types_strict_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_library_redeclaration_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_ms_struct_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_pointer_types_discards_qualifiers_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_pointer_types_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_property_type_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_incompatible_sysroot_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_incomplete_framework_module_declaration_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_incomplete_implementation_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_incomplete_module_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_incomplete_setjmp_declaration_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_incomplete_umbrella_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_inconsistent_dllimport_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_inconsistent_missing_destructor_override_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_inconsistent_missing_override_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_increment_bool_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_independent_class_attribute_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_infinite_recursion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_initializer_overrides_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_injected_class_name_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_inline_asm_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_inline_namespace_reopened_noninline_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_inline_new_delete_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_instantiation_after_specialization_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_integer_overflow_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_interrupt_service_routine_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_int_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_int_in_bool_context_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_int_to_pointer_cast_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_int_to_void_pointer_cast_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_constexpr_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_iboutlet_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_initializer_from_system_header_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_ios_deployment_target_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_noreturn_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_no_builtin_names_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_offsetof_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_or_nonexistent_directory_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_partial_specialization_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_pp_token_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_source_encoding_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_static_assert_message_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_token_paste_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_unevaluated_string_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_invalid_utf8_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_jump_seh_finally_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_keyword_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_keyword_macro_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_knr_promoted_parameter_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_language_extension_token_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_large_by_value_copy_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_linker_warnings_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_literal_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_literal_range_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_local_type_template_args_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_logical_not_parentheses_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_logical_op_parentheses_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_long_long_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_macro_redefined_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_main_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_main_return_type_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_malformed_warning_check_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_many_braces_around_scalar_init_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_mathematical_notation_identifier_extension_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_max_tokens_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_max_unsigned_zero_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_memset_transposed_args_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_memsize_comparison_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_method_signatures_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_abstract_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_anon_tag_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_cast_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_charize_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_comment_paste_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_const_init_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_cpp_macro_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_default_arg_redefinition_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_drectve_section_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_end_of_file_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_enum_forward_reference_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_enum_value_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_exception_spec_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_exists_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_explicit_constructor_call_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_extra_qualification_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_fixed_enum_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_flexible_array_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_goto_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_inaccessible_base_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_include_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_init_from_predefined_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_mutable_reference_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_pure_definition_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_redeclare_static_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_sealed_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_static_assert_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_template_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_template_shadow_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_union_member_reference_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_unqualified_friend_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_using_decl_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_microsoft_void_pseudo_dtor_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_misexpect_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_misleading_indentation_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_mismatched_new_delete_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_mismatched_parameter_types_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_mismatched_return_types_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_mismatched_tags_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_braces_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_constinit_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_declarations_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_exception_spec_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_field_initializers_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_method_return_type_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_multilib_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_noescape_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_noreturn_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_prototypes_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_missing_prototype_for_cc_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_selector_name_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_sysroot_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_missing_variable_declarations_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_misspelled_assumption_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_modules_ambiguous_internal_linkage_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_modules_import_nested_redundant_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_module_conflict_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_module_file_config_mismatch_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_module_file_extension_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_module_import_in_extern_c_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_msvc_not_found_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_multichar_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_multiple_move_vbase_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_multi_gpu_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_nested_anon_types_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_newline_eof_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_new_returns_null_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_noderef_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_nonnull_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_nonportable_include_path_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_nonportable_system_include_path_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_nonportable_vector_initialization_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_nontrivial_memaccess_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_non_c_typedef_for_linkage_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_non_literal_null_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_non_modular_include_in_framework_module_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_non_modular_include_in_module_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_non_pod_varargs_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_non_power_of_two_alignment_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_non_virtual_dtor_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_nsconsumed_mismatch_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_nsreturns_mismatch_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_ns_object_attribute_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_completeness_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_completeness_on_arrays_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_declspec_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_extension_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_nullability_inferred_on_nested_type_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_nullable_to_nonnull_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_null_arithmetic_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_null_character_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_null_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_null_dereference_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_null_pointer_arithmetic_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_null_pointer_subtraction_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_odr_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_old_style_cast_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_opencl_unsupported_rgba_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_openmp51_extensions_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_openmp_clauses_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_openmp_loop_form_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_openmp_mapping_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_openmp_target_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_option_ignored_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_ordered_compare_function_pointers_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_out_of_line_declaration_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_out_of_scope_function_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_overlength_strings_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_overloaded_shift_op_parentheses_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_overloaded_virtual_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_override_init_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_override_module_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_overriding_method_mismatch_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_overriding_t_option_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_over_aligned_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_packed_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_packed_non_pod_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_padded_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_parentheses_equality_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_parentheses_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pass_failed_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pch_date_time_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pedantic_core_features_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pedantic_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pedantic_macros_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pessimizing_move_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_arith_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_bool_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_integer_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_sign_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_to_enum_cast_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_to_int_cast_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pointer_type_mismatch_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_poison_system_directories_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_potentially_evaluated_expression_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pragmas_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_clang_attribute_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_messages_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_once_outside_header_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_pack_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_pack_suspicious_include_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pragma_system_header_outside_header_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_predefined_identifier_outside_function_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_pre_c2x_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_c2x_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp14_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp14_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp17_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp17_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp20_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp20_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp23_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp23_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp26_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp26_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp2c_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp2c_compat_pedantic_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_pre_openmp51_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_private_extern_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_private_header_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_private_module_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_profile_instr_missing_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_profile_instr_out_of_date_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_profile_instr_unprofiled_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_property_access_dot_syntax_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_property_attribute_mismatch_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_protocol_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_protocol_property_synthesis_ambiguity_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_psabi_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_qualified_void_return_type_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_quoted_include_in_framework_header_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_range_loop_analysis_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_range_loop_bind_reference_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_range_loop_construct_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_readonly_iboutlet_property_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_read_modules_implicitly_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_read_only_types_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_receiver_expr_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_receiver_forward_class_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_redeclared_class_member_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_redundant_consteval_if_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_redundant_move_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_redundant_parens_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_register_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_reinterpret_base_class_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_reorder_ctor_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_reorder_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_reorder_init_list_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_requires_super_attribute_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_reserved_identifier_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_reserved_id_macro_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_reserved_macro_identifier_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_reserved_module_identifier_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_reserved_user_defined_literal_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_restrict_expansion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_retained_language_linkage_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_return_local_addr_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_return_stack_address_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_return_std_move_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_return_type_c_linkage_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_return_type_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_rewrite_not_bool_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_sarif_format_unstable_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_section_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_selector_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_selector_type_mismatch_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_self_assign_field_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_self_assign_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_self_assign_overloaded_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_self_move_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_semicolon_before_method_body_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_sentinel_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_serialized_diagnostics_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_shadow_field_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_shadow_field_in_constructor_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_shadow_field_in_constructor_modified_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_shadow_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_shadow_ivar_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_shadow_uncaptured_local_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_shift_count_negative_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_shift_count_overflow_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_shift_negative_value_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_shift_op_parentheses_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_shift_overflow_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_shift_sign_overflow_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_shorten64_to32_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_signed_enum_bitfield_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_signed_unsigned_wchar_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_sign_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_sign_conversion_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_single_bit_bitfield_constant_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_sizeof_array_argument_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_sizeof_array_decay_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_sizeof_array_div_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_sizeof_pointer_div_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_sizeof_pointer_memaccess_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_slash_u_filename_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_slh_asm_goto_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_sometimes_uninitialized_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_source_uses_openmp_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_spirv_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_spir_compat_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_static_float_init_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_static_inline_explicit_instantiation_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_static_in_inline_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_static_local_in_inline_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_static_self_init_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_stdlibcxx_not_found_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_strict_prototypes_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_strict_selector_match_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_string_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_string_concatenation_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_string_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_string_plus_char_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_string_plus_int_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_strlcpy_strlcat_size_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_strncat_size_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_suggest_destructor_override_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_suggest_override_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_super_class_method_mismatch_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_suspicious_bzero_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_switch_bool_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_switch_enum_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_switch_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_sync_alignment_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_sync_fetch_and_nand_semantics_changed_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_target_clones_mixed_specifiers_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_tautological_bitwise_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_constant_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_constant_in_range_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_constant_out_of_range_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_objc_bool_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_overlap_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_pointer_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_type_limit_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_undefined_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_unsigned_char_zero_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_unsigned_enum_zero_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_tautological_unsigned_zero_compare_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_tautological_value_range_compare_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_tentative_definition_incomplete_type_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_analysis_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_attributes_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_beta_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_negative_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_precise_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_reference_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_verbose_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_trigraphs_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_typedef_redefinition_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_typename_missing_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_type_safety_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unable_to_open_stats_file_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unaligned_access_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unaligned_qualifier_implicit_cast_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unavailable_declarations_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_undeclared_selector_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_bool_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_func_template_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_inline_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_internal_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_internal_type_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_reinterpret_cast_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_undefined_var_template_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_undef_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_undef_prefix_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_underaligned_exception_object_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unevaluated_expression_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unguarded_availability_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unguarded_availability_new_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unicode_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unicode_homoglyph_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unicode_whitespace_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unicode_zero_width_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_uninitialized_const_reference_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_uninitialized_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unknown_argument_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unknown_attributes_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unknown_cuda_version_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unknown_directives_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unknown_escape_sequence_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unknown_pragmas_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unknown_sanitizers_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unknown_warning_option_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unnamed_type_template_args_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unneeded_internal_declaration_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unneeded_member_function_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unqualified_std_cast_call_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_break_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_fallthrough_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_generic_assoc_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_loop_increment_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_return_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unsafe_buffer_usage_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unsequenced_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_abi_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_abs_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_availability_guard_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_cb_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_dll_base_class_template_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_friend_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_gpopt_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_nan_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_target_opt_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unsupported_visibility_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unusable_partial_specialization_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_but_set_parameter_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unused_but_set_variable_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unused_comparison_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_const_variable_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_exception_parameter_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_function_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_getter_return_value_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_label_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_lambda_capture_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unused_local_typedef_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unused_macros_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_member_function_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_parameter_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unused_private_field_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_property_ivar_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_result_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unused_template_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unused_value_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_unused_variable_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_unused_volatile_lvalue_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_used_but_marked_unused_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_user_defined_literals_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_user_defined_warnings_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_varargs_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_variadic_macros_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_vector_conversion_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_vec_elem_size_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_vexing_parse_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_visibility_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_vla_extension_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_vla_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_void_pointer_to_enum_cast_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_void_pointer_to_int_cast_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_void_ptr_dereference_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_warnings_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_wasm_exception_spec_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_weak_template_vtables_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_weak_vtables_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_writable_strings_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_xor_used_as_pow_highlighting = warning +resharper_cpp_clang_tidy_clang_diagnostic_zero_as_null_pointer_constant_highlighting = none +resharper_cpp_clang_tidy_clang_diagnostic_zero_length_array_highlighting = warning +resharper_cpp_clang_tidy_concurrency_mt_unsafe_highlighting = warning +resharper_cpp_clang_tidy_concurrency_thread_canceltype_asynchronous_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_capturing_lambda_coroutines_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_const_or_ref_data_members_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_c_arrays_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_do_while_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_goto_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_magic_numbers_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_non_const_global_variables_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_avoid_reference_coroutine_parameters_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_c_copy_assignment_signature_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_explicit_virtual_functions_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_init_variables_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_interfaces_global_init_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_macro_usage_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_misleading_capture_default_by_value_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_missing_std_forward_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_narrowing_conversions_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_noexcept_destructor_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_noexcept_move_operations_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_noexcept_swap_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_non_private_member_variables_in_classes_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_no_malloc_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_owning_memory_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_prefer_member_initializer_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_bounds_array_to_pointer_decay_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_bounds_constant_array_index_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_bounds_pointer_arithmetic_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_const_cast_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_cstyle_cast_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_member_init_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_reinterpret_cast_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_static_cast_downcast_highlighting = suggestion +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_union_access_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_vararg_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_rvalue_reference_param_not_moved_highlighting = warning +resharper_cpp_clang_tidy_cppcoreguidelines_slicing_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_special_member_functions_highlighting = suggestion +resharper_cpp_clang_tidy_cppcoreguidelines_use_default_member_init_highlighting = none +resharper_cpp_clang_tidy_cppcoreguidelines_virtual_class_destructor_highlighting = none +resharper_cpp_clang_tidy_darwin_avoid_spinlock_highlighting = none +resharper_cpp_clang_tidy_darwin_dispatch_once_nonstatic_highlighting = none +resharper_cpp_clang_tidy_fuchsia_default_arguments_calls_highlighting = none +resharper_cpp_clang_tidy_fuchsia_default_arguments_declarations_highlighting = none +resharper_cpp_clang_tidy_fuchsia_header_anon_namespaces_highlighting = none +resharper_cpp_clang_tidy_fuchsia_multiple_inheritance_highlighting = none +resharper_cpp_clang_tidy_fuchsia_overloaded_operator_highlighting = none +resharper_cpp_clang_tidy_fuchsia_statically_constructed_objects_highlighting = none +resharper_cpp_clang_tidy_fuchsia_trailing_return_highlighting = none +resharper_cpp_clang_tidy_fuchsia_virtual_inheritance_highlighting = none +resharper_cpp_clang_tidy_google_build_explicit_make_pair_highlighting = none +resharper_cpp_clang_tidy_google_build_namespaces_highlighting = none +resharper_cpp_clang_tidy_google_build_using_namespace_highlighting = none +resharper_cpp_clang_tidy_google_default_arguments_highlighting = none +resharper_cpp_clang_tidy_google_explicit_constructor_highlighting = none +resharper_cpp_clang_tidy_google_global_names_in_headers_highlighting = none +resharper_cpp_clang_tidy_google_objc_avoid_nsobject_new_highlighting = none +resharper_cpp_clang_tidy_google_objc_avoid_throwing_exception_highlighting = none +resharper_cpp_clang_tidy_google_objc_function_naming_highlighting = none +resharper_cpp_clang_tidy_google_objc_global_variable_declaration_highlighting = none +resharper_cpp_clang_tidy_google_readability_avoid_underscore_in_googletest_name_highlighting = none +resharper_cpp_clang_tidy_google_readability_braces_around_statements_highlighting = none +resharper_cpp_clang_tidy_google_readability_casting_highlighting = none +resharper_cpp_clang_tidy_google_readability_function_size_highlighting = none +resharper_cpp_clang_tidy_google_readability_namespace_comments_highlighting = none +resharper_cpp_clang_tidy_google_readability_todo_highlighting = none +resharper_cpp_clang_tidy_google_runtime_int_highlighting = none +resharper_cpp_clang_tidy_google_runtime_operator_highlighting = warning +resharper_cpp_clang_tidy_google_upgrade_googletest_case_highlighting = suggestion +resharper_cpp_clang_tidy_hicpp_avoid_c_arrays_highlighting = none +resharper_cpp_clang_tidy_hicpp_avoid_goto_highlighting = warning +resharper_cpp_clang_tidy_hicpp_braces_around_statements_highlighting = none +resharper_cpp_clang_tidy_hicpp_deprecated_headers_highlighting = none +resharper_cpp_clang_tidy_hicpp_exception_baseclass_highlighting = suggestion +resharper_cpp_clang_tidy_hicpp_explicit_conversions_highlighting = none +resharper_cpp_clang_tidy_hicpp_function_size_highlighting = none +resharper_cpp_clang_tidy_hicpp_invalid_access_moved_highlighting = none +resharper_cpp_clang_tidy_hicpp_member_init_highlighting = none +resharper_cpp_clang_tidy_hicpp_move_const_arg_highlighting = none +resharper_cpp_clang_tidy_hicpp_multiway_paths_covered_highlighting = warning +resharper_cpp_clang_tidy_hicpp_named_parameter_highlighting = none +resharper_cpp_clang_tidy_hicpp_new_delete_operators_highlighting = none +resharper_cpp_clang_tidy_hicpp_noexcept_move_highlighting = none +resharper_cpp_clang_tidy_hicpp_no_array_decay_highlighting = none +resharper_cpp_clang_tidy_hicpp_no_assembler_highlighting = none +resharper_cpp_clang_tidy_hicpp_no_malloc_highlighting = none +resharper_cpp_clang_tidy_hicpp_signed_bitwise_highlighting = none +resharper_cpp_clang_tidy_hicpp_special_member_functions_highlighting = none +resharper_cpp_clang_tidy_hicpp_static_assert_highlighting = none +resharper_cpp_clang_tidy_hicpp_undelegated_constructor_highlighting = none +resharper_cpp_clang_tidy_hicpp_uppercase_literal_suffix_highlighting = none +resharper_cpp_clang_tidy_hicpp_use_auto_highlighting = none +resharper_cpp_clang_tidy_hicpp_use_emplace_highlighting = none +resharper_cpp_clang_tidy_hicpp_use_equals_default_highlighting = none +resharper_cpp_clang_tidy_hicpp_use_equals_delete_highlighting = none +resharper_cpp_clang_tidy_hicpp_use_noexcept_highlighting = none +resharper_cpp_clang_tidy_hicpp_use_nullptr_highlighting = none +resharper_cpp_clang_tidy_hicpp_use_override_highlighting = none +resharper_cpp_clang_tidy_hicpp_vararg_highlighting = none +resharper_cpp_clang_tidy_highlighting_highlighting = suggestion +resharper_cpp_clang_tidy_linuxkernel_must_check_errs_highlighting = warning +resharper_cpp_clang_tidy_llvmlibc_callee_namespace_highlighting = none +resharper_cpp_clang_tidy_llvmlibc_implementation_in_namespace_highlighting = none +resharper_cpp_clang_tidy_llvmlibc_inline_function_decl_highlighting = none +resharper_cpp_clang_tidy_llvmlibc_restrict_system_libc_headers_highlighting = none +resharper_cpp_clang_tidy_llvm_else_after_return_highlighting = none +resharper_cpp_clang_tidy_llvm_header_guard_highlighting = none +resharper_cpp_clang_tidy_llvm_include_order_highlighting = none +resharper_cpp_clang_tidy_llvm_namespace_comment_highlighting = none +resharper_cpp_clang_tidy_llvm_prefer_isa_or_dyn_cast_in_conditionals_highlighting = none +resharper_cpp_clang_tidy_llvm_prefer_register_over_unsigned_highlighting = suggestion +resharper_cpp_clang_tidy_llvm_qualified_auto_highlighting = none +resharper_cpp_clang_tidy_llvm_twine_local_highlighting = none +resharper_cpp_clang_tidy_misc_confusable_identifiers_highlighting = warning +resharper_cpp_clang_tidy_misc_const_correctness_highlighting = none +resharper_cpp_clang_tidy_misc_definitions_in_headers_highlighting = none +resharper_cpp_clang_tidy_misc_header_include_cycle_highlighting = warning +resharper_cpp_clang_tidy_misc_include_cleaner_highlighting = none +resharper_cpp_clang_tidy_misc_misleading_bidirectional_highlighting = warning +resharper_cpp_clang_tidy_misc_misleading_identifier_highlighting = warning +resharper_cpp_clang_tidy_misc_misplaced_const_highlighting = none +resharper_cpp_clang_tidy_misc_new_delete_overloads_highlighting = warning +resharper_cpp_clang_tidy_misc_non_copyable_objects_highlighting = warning +resharper_cpp_clang_tidy_misc_non_private_member_variables_in_classes_highlighting = none +resharper_cpp_clang_tidy_misc_no_recursion_highlighting = none +resharper_cpp_clang_tidy_misc_redundant_expression_highlighting = warning +resharper_cpp_clang_tidy_misc_static_assert_highlighting = suggestion +resharper_cpp_clang_tidy_misc_throw_by_value_catch_by_reference_highlighting = warning +resharper_cpp_clang_tidy_misc_unconventional_assign_operator_highlighting = warning +resharper_cpp_clang_tidy_misc_uniqueptr_reset_release_highlighting = suggestion +resharper_cpp_clang_tidy_misc_unused_alias_decls_highlighting = suggestion +resharper_cpp_clang_tidy_misc_unused_parameters_highlighting = none +resharper_cpp_clang_tidy_misc_unused_using_decls_highlighting = suggestion +resharper_cpp_clang_tidy_misc_use_anonymous_namespace_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_avoid_bind_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_avoid_c_arrays_highlighting = none +resharper_cpp_clang_tidy_modernize_concat_nested_namespaces_highlighting = none +resharper_cpp_clang_tidy_modernize_deprecated_headers_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_deprecated_ios_base_aliases_highlighting = warning +resharper_cpp_clang_tidy_modernize_loop_convert_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_macro_to_enum_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_make_shared_highlighting = none +resharper_cpp_clang_tidy_modernize_make_unique_highlighting = none +resharper_cpp_clang_tidy_modernize_pass_by_value_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_raw_string_literal_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_redundant_void_arg_highlighting = none +resharper_cpp_clang_tidy_modernize_replace_auto_ptr_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_replace_disallow_copy_and_assign_macro_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_replace_random_shuffle_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_return_braced_init_list_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_shrink_to_fit_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_type_traits_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_unary_static_assert_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_auto_highlighting = none +resharper_cpp_clang_tidy_modernize_use_bool_literals_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_default_member_init_highlighting = none +resharper_cpp_clang_tidy_modernize_use_emplace_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_equals_default_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_equals_delete_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_nodiscard_highlighting = hint +resharper_cpp_clang_tidy_modernize_use_noexcept_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_nullptr_highlighting = none +resharper_cpp_clang_tidy_modernize_use_override_highlighting = none +resharper_cpp_clang_tidy_modernize_use_std_print_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_trailing_return_type_highlighting = none +resharper_cpp_clang_tidy_modernize_use_transparent_functors_highlighting = suggestion +resharper_cpp_clang_tidy_modernize_use_uncaught_exceptions_highlighting = warning +resharper_cpp_clang_tidy_modernize_use_using_highlighting = none +resharper_cpp_clang_tidy_mpi_buffer_deref_highlighting = warning +resharper_cpp_clang_tidy_mpi_type_mismatch_highlighting = warning +resharper_cpp_clang_tidy_objc_assert_equals_highlighting = warning +resharper_cpp_clang_tidy_objc_avoid_nserror_init_highlighting = warning +resharper_cpp_clang_tidy_objc_dealloc_in_category_highlighting = warning +resharper_cpp_clang_tidy_objc_forbidden_subclassing_highlighting = warning +resharper_cpp_clang_tidy_objc_missing_hash_highlighting = warning +resharper_cpp_clang_tidy_objc_nsdate_formatter_highlighting = none +resharper_cpp_clang_tidy_objc_nsinvocation_argument_lifetime_highlighting = warning +resharper_cpp_clang_tidy_objc_property_declaration_highlighting = warning +resharper_cpp_clang_tidy_objc_super_self_highlighting = warning +resharper_cpp_clang_tidy_openmp_exception_escape_highlighting = warning +resharper_cpp_clang_tidy_openmp_use_default_none_highlighting = warning +resharper_cpp_clang_tidy_performance_avoid_endl_highlighting = warning +resharper_cpp_clang_tidy_performance_faster_string_find_highlighting = suggestion +resharper_cpp_clang_tidy_performance_for_range_copy_highlighting = suggestion +resharper_cpp_clang_tidy_performance_implicit_conversion_in_loop_highlighting = suggestion +resharper_cpp_clang_tidy_performance_inefficient_algorithm_highlighting = suggestion +resharper_cpp_clang_tidy_performance_inefficient_string_concatenation_highlighting = suggestion +resharper_cpp_clang_tidy_performance_inefficient_vector_operation_highlighting = suggestion +resharper_cpp_clang_tidy_performance_move_constructor_init_highlighting = warning +resharper_cpp_clang_tidy_performance_move_const_arg_highlighting = suggestion +resharper_cpp_clang_tidy_performance_noexcept_destructor_highlighting = warning +resharper_cpp_clang_tidy_performance_noexcept_move_constructor_highlighting = warning +resharper_cpp_clang_tidy_performance_noexcept_swap_highlighting = warning +resharper_cpp_clang_tidy_performance_no_automatic_move_highlighting = warning +resharper_cpp_clang_tidy_performance_no_int_to_ptr_highlighting = warning +resharper_cpp_clang_tidy_performance_trivially_destructible_highlighting = suggestion +resharper_cpp_clang_tidy_performance_type_promotion_in_math_fn_highlighting = suggestion +resharper_cpp_clang_tidy_performance_unnecessary_copy_initialization_highlighting = suggestion +resharper_cpp_clang_tidy_performance_unnecessary_value_param_highlighting = suggestion +resharper_cpp_clang_tidy_portability_restrict_system_includes_highlighting = none +resharper_cpp_clang_tidy_portability_simd_intrinsics_highlighting = none +resharper_cpp_clang_tidy_portability_std_allocator_const_highlighting = warning +resharper_cpp_clang_tidy_readability_avoid_const_params_in_decls_highlighting = none +resharper_cpp_clang_tidy_readability_avoid_unconditional_preprocessor_if_highlighting = warning +resharper_cpp_clang_tidy_readability_braces_around_statements_highlighting = none +resharper_cpp_clang_tidy_readability_const_return_type_highlighting = none +resharper_cpp_clang_tidy_readability_container_contains_highlighting = none +resharper_cpp_clang_tidy_readability_container_data_pointer_highlighting = suggestion +resharper_cpp_clang_tidy_readability_container_size_empty_highlighting = suggestion +resharper_cpp_clang_tidy_readability_convert_member_functions_to_static_highlighting = none +resharper_cpp_clang_tidy_readability_delete_null_pointer_highlighting = suggestion +resharper_cpp_clang_tidy_readability_duplicate_include_highlighting = none +resharper_cpp_clang_tidy_readability_else_after_return_highlighting = none +resharper_cpp_clang_tidy_readability_function_cognitive_complexity_highlighting = none +resharper_cpp_clang_tidy_readability_function_size_highlighting = none +resharper_cpp_clang_tidy_readability_identifier_length_highlighting = none +resharper_cpp_clang_tidy_readability_identifier_naming_highlighting = none +resharper_cpp_clang_tidy_readability_implicit_bool_conversion_highlighting = none +resharper_cpp_clang_tidy_readability_inconsistent_declaration_parameter_name_highlighting = suggestion +resharper_cpp_clang_tidy_readability_isolate_declaration_highlighting = none +resharper_cpp_clang_tidy_readability_magic_numbers_highlighting = none +resharper_cpp_clang_tidy_readability_make_member_function_const_highlighting = none +resharper_cpp_clang_tidy_readability_misleading_indentation_highlighting = none +resharper_cpp_clang_tidy_readability_misplaced_array_index_highlighting = suggestion +resharper_cpp_clang_tidy_readability_named_parameter_highlighting = none +resharper_cpp_clang_tidy_readability_non_const_parameter_highlighting = none +resharper_cpp_clang_tidy_readability_operators_representation_highlighting = suggestion +resharper_cpp_clang_tidy_readability_qualified_auto_highlighting = none +resharper_cpp_clang_tidy_readability_redundant_access_specifiers_highlighting = none +resharper_cpp_clang_tidy_readability_redundant_control_flow_highlighting = none +resharper_cpp_clang_tidy_readability_redundant_declaration_highlighting = suggestion +resharper_cpp_clang_tidy_readability_redundant_function_ptr_dereference_highlighting = suggestion +resharper_cpp_clang_tidy_readability_redundant_member_init_highlighting = none +resharper_cpp_clang_tidy_readability_redundant_preprocessor_highlighting = warning +resharper_cpp_clang_tidy_readability_redundant_smartptr_get_highlighting = suggestion +resharper_cpp_clang_tidy_readability_redundant_string_cstr_highlighting = suggestion +resharper_cpp_clang_tidy_readability_redundant_string_init_highlighting = suggestion +resharper_cpp_clang_tidy_readability_simplify_boolean_expr_highlighting = none +resharper_cpp_clang_tidy_readability_simplify_subscript_expr_highlighting = warning +resharper_cpp_clang_tidy_readability_static_accessed_through_instance_highlighting = suggestion +resharper_cpp_clang_tidy_readability_static_definition_in_anonymous_namespace_highlighting = none +resharper_cpp_clang_tidy_readability_string_compare_highlighting = warning +resharper_cpp_clang_tidy_readability_suspicious_call_argument_highlighting = warning +resharper_cpp_clang_tidy_readability_uniqueptr_delete_release_highlighting = suggestion +resharper_cpp_clang_tidy_readability_uppercase_literal_suffix_highlighting = none +resharper_cpp_clang_tidy_readability_use_anyofallof_highlighting = suggestion +resharper_cpp_clang_tidy_zircon_temporary_objects_highlighting = none +resharper_cpp_class_can_be_final_highlighting = hint +resharper_cpp_class_is_incomplete_highlighting = warning +resharper_cpp_class_needs_constructor_because_of_uninitialized_member_highlighting = warning +resharper_cpp_class_never_used_highlighting = warning +resharper_cpp_compile_time_constant_can_be_replaced_with_boolean_constant_highlighting = suggestion +resharper_cpp_concept_never_used_highlighting = warning +resharper_cpp_conditional_expression_can_be_simplified_highlighting = suggestion +resharper_cpp_const_parameter_in_declaration_highlighting = suggestion +resharper_cpp_const_value_function_return_type_highlighting = suggestion +resharper_cpp_coroutine_call_resolve_error_highlighting = warning +resharper_cpp_cv_qualifier_can_not_be_applied_to_reference_highlighting = warning +resharper_cpp_c_style_cast_highlighting = suggestion +resharper_cpp_declaration_hides_local_highlighting = warning +resharper_cpp_declaration_hides_uncaptured_local_highlighting = hint +resharper_cpp_declaration_specifier_without_declarators_highlighting = warning +resharper_cpp_declarator_disambiguated_as_function_highlighting = warning +resharper_cpp_declarator_never_used_highlighting = warning +resharper_cpp_declarator_used_before_initialization_highlighting = error +resharper_cpp_defaulted_special_member_function_is_implicitly_deleted_highlighting = warning +resharper_cpp_default_case_not_handled_in_switch_statement_highlighting = warning +resharper_cpp_default_initialization_with_no_user_constructor_highlighting = warning +resharper_cpp_default_is_used_as_identifier_highlighting = warning +resharper_cpp_deleting_void_pointer_highlighting = warning +resharper_cpp_dependent_template_without_template_keyword_highlighting = warning +resharper_cpp_dependent_type_without_typename_keyword_highlighting = warning +resharper_cpp_deprecated_entity_highlighting = warning +resharper_cpp_deprecated_register_storage_class_specifier_highlighting = warning +resharper_cpp_dereference_operator_limit_exceeded_highlighting = warning +resharper_cpp_discarded_postfix_operator_result_highlighting = suggestion +resharper_cpp_doxygen_syntax_error_highlighting = warning +resharper_cpp_doxygen_undocumented_parameter_highlighting = suggestion +resharper_cpp_doxygen_unresolved_reference_highlighting = warning +resharper_cpp_empty_declaration_highlighting = warning +resharper_cpp_enforce_cv_qualifiers_order_highlighting = none +resharper_cpp_enforce_cv_qualifiers_placement_highlighting = none +resharper_cpp_enforce_do_statement_braces_highlighting = none +resharper_cpp_enforce_for_statement_braces_highlighting = none +resharper_cpp_enforce_function_declaration_style_highlighting = none +resharper_cpp_enforce_if_statement_braces_highlighting = none +resharper_cpp_enforce_nested_namespaces_style_highlighting = hint +resharper_cpp_enforce_overriding_destructor_style_highlighting = suggestion +resharper_cpp_enforce_overriding_function_style_highlighting = suggestion +resharper_cpp_enforce_type_alias_code_style_highlighting = none +resharper_cpp_enforce_while_statement_braces_highlighting = none +resharper_cpp_entity_assigned_but_no_read_highlighting = warning +resharper_cpp_entity_used_only_in_unevaluated_context_highlighting = warning +resharper_cpp_enumerator_never_used_highlighting = warning +resharper_cpp_equal_operands_in_binary_expression_highlighting = warning +resharper_cpp_explicit_specialization_in_non_namespace_scope_highlighting = warning +resharper_cpp_expression_without_side_effects_highlighting = warning +resharper_cpp_final_function_in_final_class_highlighting = suggestion +resharper_cpp_final_non_overriding_virtual_function_highlighting = suggestion +resharper_cpp_forward_enum_declaration_without_underlying_type_highlighting = warning +resharper_cpp_for_loop_can_be_replaced_with_while_highlighting = suggestion +resharper_cpp_functional_style_cast_highlighting = suggestion +resharper_cpp_function_doesnt_return_value_highlighting = warning +resharper_cpp_function_is_not_implemented_highlighting = warning +resharper_cpp_function_result_should_be_used_highlighting = hint +resharper_cpp_header_has_been_already_included_highlighting = hint +resharper_cpp_hidden_function_highlighting = warning +resharper_cpp_hiding_function_highlighting = warning +resharper_cpp_identical_operands_in_binary_expression_highlighting = warning +resharper_cpp_if_can_be_replaced_by_constexpr_if_highlighting = suggestion +resharper_cpp_implicit_default_constructor_not_available_highlighting = warning +resharper_cpp_incompatible_pointer_conversion_highlighting = warning +resharper_cpp_incomplete_switch_statement_highlighting = warning +resharper_cpp_inconsistent_naming_highlighting = hint +resharper_cpp_incorrect_blank_lines_near_braces_highlighting = none +resharper_cpp_initialized_value_is_always_rewritten_highlighting = warning +resharper_cpp_integral_to_pointer_conversion_highlighting = warning +resharper_cpp_invalid_line_continuation_highlighting = warning +resharper_cpp_join_declaration_and_assignment_highlighting = suggestion +resharper_cpp_lambda_capture_never_used_highlighting = warning +resharper_cpp_local_variable_may_be_const_highlighting = suggestion +resharper_cpp_local_variable_might_not_be_initialized_highlighting = warning +resharper_cpp_local_variable_with_non_trivial_dtor_is_never_used_highlighting = none +resharper_cpp_long_float_highlighting = warning +resharper_cpp_member_function_may_be_const_highlighting = suggestion +resharper_cpp_member_function_may_be_static_highlighting = suggestion +resharper_cpp_member_initializers_order_highlighting = suggestion +resharper_cpp_mismatched_class_tags_highlighting = warning +resharper_cpp_missing_blank_lines_highlighting = none +resharper_cpp_missing_include_guard_highlighting = warning +resharper_cpp_missing_indent_highlighting = none +resharper_cpp_missing_keyword_throw_highlighting = warning +resharper_cpp_missing_linebreak_highlighting = none +resharper_cpp_missing_space_highlighting = none +resharper_cpp_ms_ext_address_of_class_r_value_highlighting = warning +resharper_cpp_ms_ext_binding_r_value_to_lvalue_reference_highlighting = warning +resharper_cpp_ms_ext_copy_elision_in_copy_init_declarator_highlighting = warning +resharper_cpp_ms_ext_double_user_conversion_in_copy_init_highlighting = warning +resharper_cpp_ms_ext_not_initialized_static_const_local_var_highlighting = warning +resharper_cpp_ms_ext_reinterpret_cast_from_nullptr_highlighting = warning +resharper_cpp_multiple_spaces_highlighting = none +resharper_cpp_multi_character_literal_highlighting = warning +resharper_cpp_multi_character_wide_literal_highlighting = warning +resharper_cpp_must_be_public_virtual_to_implement_interface_highlighting = warning +resharper_cpp_mutable_specifier_on_reference_member_highlighting = warning +resharper_cpp_nodiscard_function_without_return_value_highlighting = warning +resharper_cpp_non_exception_safe_resource_acquisition_highlighting = hint +resharper_cpp_non_explicit_conversion_operator_highlighting = hint +resharper_cpp_non_explicit_converting_constructor_highlighting = hint +resharper_cpp_non_inline_function_definition_in_header_file_highlighting = warning +resharper_cpp_non_inline_variable_definition_in_header_file_highlighting = warning +resharper_cpp_not_all_paths_return_value_highlighting = warning +resharper_cpp_no_discard_expression_highlighting = warning +resharper_cpp_object_member_might_not_be_initialized_highlighting = warning +resharper_cpp_outdent_is_off_prev_level_highlighting = none +resharper_cpp_out_parameter_must_be_written_highlighting = warning +resharper_cpp_parameter_may_be_const_highlighting = hint +resharper_cpp_parameter_may_be_const_ptr_or_ref_highlighting = suggestion +resharper_cpp_parameter_names_mismatch_highlighting = hint +resharper_cpp_parameter_never_used_highlighting = hint +resharper_cpp_parameter_value_is_reassigned_highlighting = warning +resharper_cpp_pass_value_parameter_by_const_reference_highlighting = suggestion +resharper_cpp_pointer_conversion_drops_qualifiers_highlighting = warning +resharper_cpp_pointer_to_integral_conversion_highlighting = warning +resharper_cpp_polymorphic_class_with_non_virtual_public_destructor_highlighting = warning +resharper_cpp_possibly_erroneous_empty_statements_highlighting = warning +resharper_cpp_possibly_uninitialized_member_highlighting = warning +resharper_cpp_possibly_unintended_object_slicing_highlighting = warning +resharper_cpp_precompiled_header_is_not_included_highlighting = error +resharper_cpp_precompiled_header_not_found_highlighting = error +resharper_cpp_printf_bad_format_highlighting = warning +resharper_cpp_printf_extra_arg_highlighting = warning +resharper_cpp_printf_missed_arg_highlighting = error +resharper_cpp_printf_risky_format_highlighting = warning +resharper_cpp_private_special_member_function_is_not_implemented_highlighting = warning +resharper_cpp_range_based_for_incompatible_reference_highlighting = warning +resharper_cpp_redefinition_of_default_argument_in_override_function_highlighting = warning +resharper_cpp_redundant_access_specifier_highlighting = hint +resharper_cpp_redundant_base_class_access_specifier_highlighting = hint +resharper_cpp_redundant_base_class_initializer_highlighting = suggestion +resharper_cpp_redundant_blank_lines_highlighting = none +resharper_cpp_redundant_boolean_expression_argument_highlighting = warning +resharper_cpp_redundant_cast_expression_highlighting = hint +resharper_cpp_redundant_complexity_in_comparison_highlighting = suggestion +resharper_cpp_redundant_conditional_expression_highlighting = suggestion +resharper_cpp_redundant_const_specifier_highlighting = hint +resharper_cpp_redundant_control_flow_jump_highlighting = hint +resharper_cpp_redundant_dereferencing_and_taking_address_highlighting = suggestion +resharper_cpp_redundant_elaborated_type_specifier_highlighting = hint +resharper_cpp_redundant_else_keyword_highlighting = hint +resharper_cpp_redundant_else_keyword_inside_compound_statement_highlighting = hint +resharper_cpp_redundant_empty_declaration_highlighting = hint +resharper_cpp_redundant_empty_statement_highlighting = hint +resharper_cpp_redundant_export_keyword_highlighting = warning +resharper_cpp_redundant_inline_specifier_highlighting = hint +resharper_cpp_redundant_lambda_parameter_list_highlighting = hint +resharper_cpp_redundant_linebreak_highlighting = none +resharper_cpp_redundant_member_initializer_highlighting = suggestion +resharper_cpp_redundant_namespace_definition_highlighting = suggestion +resharper_cpp_redundant_parentheses_highlighting = hint +resharper_cpp_redundant_qualifier_highlighting = hint +resharper_cpp_redundant_space_highlighting = none +resharper_cpp_redundant_static_specifier_on_member_allocation_function_highlighting = hint +resharper_cpp_redundant_static_specifier_on_thread_local_local_variable_highlighting = hint +resharper_cpp_redundant_template_arguments_highlighting = hint +resharper_cpp_redundant_template_keyword_highlighting = warning +resharper_cpp_redundant_typename_keyword_highlighting = warning +resharper_cpp_redundant_void_argument_list_highlighting = suggestion +resharper_cpp_reinterpret_cast_from_void_ptr_highlighting = suggestion +resharper_cpp_remove_redundant_braces_highlighting = none +resharper_cpp_replace_memset_with_zero_initialization_highlighting = suggestion +resharper_cpp_replace_tie_with_structured_binding_highlighting = suggestion +resharper_cpp_return_no_value_in_non_void_function_highlighting = warning +resharper_cpp_smart_pointer_vs_make_function_highlighting = suggestion +resharper_cpp_some_object_members_might_not_be_initialized_highlighting = warning +resharper_cpp_special_function_without_noexcept_specification_highlighting = warning +resharper_cpp_static_assert_failure_highlighting = error +resharper_cpp_static_data_member_in_unnamed_struct_highlighting = warning +resharper_cpp_static_specifier_on_anonymous_namespace_member_highlighting = suggestion +resharper_cpp_string_literal_to_char_pointer_conversion_highlighting = warning +resharper_cpp_tabs_and_spaces_mismatch_highlighting = none +resharper_cpp_tabs_are_disallowed_highlighting = none +resharper_cpp_tabs_outside_indent_highlighting = none +resharper_cpp_template_arguments_can_be_deduced_highlighting = hint +resharper_cpp_template_parameter_never_used_highlighting = hint +resharper_cpp_template_parameter_shadowing_highlighting = warning +resharper_cpp_this_arg_member_func_delegate_ctor_is_unsuported_by_dot_net_core_highlighting = none +resharper_cpp_throw_expression_can_be_replaced_with_rethrow_highlighting = warning +resharper_cpp_too_wide_scope_highlighting = suggestion +resharper_cpp_too_wide_scope_init_statement_highlighting = hint +resharper_cpp_type_alias_never_used_highlighting = warning +resharper_cpp_ue4_blueprint_callable_function_may_be_const_highlighting = hint +resharper_cpp_ue4_blueprint_callable_function_may_be_static_highlighting = hint +resharper_cpp_ue4_coding_standard_naming_violation_warning_highlighting = hint +resharper_cpp_ue4_coding_standard_u_class_naming_violation_error_highlighting = error +resharper_cpp_ue4_probable_memory_issues_with_u_objects_in_container_highlighting = warning +resharper_cpp_ue4_probable_memory_issues_with_u_object_highlighting = warning +resharper_cpp_ue_blueprint_callable_function_unused_highlighting = warning +resharper_cpp_ue_blueprint_implementable_event_not_implemented_highlighting = warning +resharper_cpp_ue_incorrect_engine_directory_highlighting = error +resharper_cpp_ue_non_existent_input_action_highlighting = warning +resharper_cpp_ue_non_existent_input_axis_highlighting = warning +resharper_cpp_ue_source_file_without_predefined_macros_highlighting = warning +resharper_cpp_ue_source_file_without_standard_library_highlighting = error +resharper_cpp_ue_version_file_doesnt_exist_highlighting = error +resharper_cpp_uninitialized_dependent_base_class_highlighting = warning +resharper_cpp_uninitialized_non_static_data_member_highlighting = warning +resharper_cpp_union_member_of_reference_type_highlighting = warning +resharper_cpp_unmatched_pragma_end_region_directive_highlighting = warning +resharper_cpp_unmatched_pragma_region_directive_highlighting = warning +resharper_cpp_unnamed_namespace_in_header_file_highlighting = warning +resharper_cpp_unnecessary_whitespace_highlighting = none +resharper_cpp_unreachable_code_highlighting = warning +resharper_cpp_unsigned_zero_comparison_highlighting = warning +resharper_cpp_unused_include_directive_highlighting = warning +resharper_cpp_user_defined_literal_suffix_does_not_start_with_underscore_highlighting = warning +resharper_cpp_use_algorithm_with_count_highlighting = suggestion +resharper_cpp_use_associative_contains_highlighting = suggestion +resharper_cpp_use_auto_for_numeric_highlighting = hint +resharper_cpp_use_auto_highlighting = hint +resharper_cpp_use_elements_view_highlighting = suggestion +resharper_cpp_use_erase_algorithm_highlighting = suggestion +resharper_cpp_use_familiar_template_syntax_for_generic_lambdas_highlighting = suggestion +resharper_cpp_use_of_undeclared_class_highlighting = hint +resharper_cpp_use_range_algorithm_highlighting = suggestion +resharper_cpp_use_std_size_highlighting = suggestion +resharper_cpp_use_structured_binding_highlighting = hint +resharper_cpp_use_type_trait_alias_highlighting = suggestion +resharper_cpp_using_result_of_assignment_as_condition_highlighting = warning +resharper_cpp_u_function_macro_call_has_no_effect_highlighting = warning +resharper_cpp_u_property_macro_call_has_no_effect_highlighting = warning +resharper_cpp_variable_can_be_made_constexpr_highlighting = suggestion +resharper_cpp_virtual_function_call_inside_ctor_highlighting = warning +resharper_cpp_virtual_function_in_final_class_highlighting = warning +resharper_cpp_volatile_parameter_in_declaration_highlighting = suggestion +resharper_cpp_warning_directive_highlighting = warning +resharper_cpp_wrong_includes_order_highlighting = hint +resharper_cpp_wrong_indent_size_highlighting = none +resharper_cpp_wrong_slashes_in_include_directive_highlighting = hint +resharper_cpp_zero_constant_can_be_replaced_with_nullptr_highlighting = suggestion +resharper_cpp_zero_valued_expression_used_as_null_pointer_highlighting = warning +resharper_c_declaration_with_implicit_int_type_highlighting = warning +resharper_c_sharp_build_cs_invalid_module_name_highlighting = warning +resharper_c_sharp_missing_plugin_dependency_highlighting = warning +resharper_default_value_attribute_for_optional_parameter_highlighting = warning +resharper_dispose_on_using_variable_highlighting = warning +resharper_double_negation_in_pattern_highlighting = suggestion +resharper_double_negation_operator_highlighting = suggestion +resharper_duplicate_resource_highlighting = warning +resharper_empty_constructor_highlighting = warning +resharper_empty_destructor_highlighting = warning +resharper_empty_embedded_statement_highlighting = warning +resharper_empty_for_statement_highlighting = warning +resharper_empty_general_catch_clause_highlighting = warning +resharper_empty_namespace_highlighting = warning +resharper_empty_region_highlighting = suggestion +resharper_empty_statement_highlighting = warning +resharper_empty_title_tag_highlighting = hint +resharper_enforce_do_while_statement_braces_highlighting = none +resharper_enforce_fixed_statement_braces_highlighting = none +resharper_enforce_foreach_statement_braces_highlighting = none +resharper_enforce_for_statement_braces_highlighting = none +resharper_enforce_if_statement_braces_highlighting = none +resharper_enforce_lock_statement_braces_highlighting = none +resharper_enforce_using_statement_braces_highlighting = none +resharper_enforce_while_statement_braces_highlighting = none +resharper_entity_framework_client_side_db_function_call_highlighting = warning +resharper_entity_framework_model_validation_circular_dependency_highlighting = hint +resharper_entity_framework_model_validation_unlimited_string_length_highlighting = warning +resharper_entity_framework_n_plus_one_incomplete_data_query_highlighting = suggestion +resharper_entity_framework_n_plus_one_incomplete_data_usage_highlighting = warning +resharper_entity_framework_n_plus_one_query_highlighting = suggestion +resharper_entity_framework_n_plus_one_usage_highlighting = warning +resharper_entity_framework_unsupported_server_side_function_call_highlighting = warning +resharper_entity_name_captured_only_global_highlighting = warning +resharper_entity_name_captured_only_local_highlighting = warning +resharper_enumerable_sum_in_explicit_unchecked_context_highlighting = warning +resharper_enum_underlying_type_is_int_highlighting = warning +resharper_equal_expression_comparison_highlighting = warning +resharper_escaped_keyword_highlighting = warning +resharper_event_never_invoked_global_highlighting = suggestion +resharper_event_never_subscribed_to_global_highlighting = suggestion +resharper_event_never_subscribed_to_local_highlighting = suggestion +resharper_event_unsubscription_via_anonymous_delegate_highlighting = warning +resharper_explicit_caller_info_argument_highlighting = warning +resharper_expression_is_always_null_highlighting = warning +resharper_extract_common_property_pattern_highlighting = hint +resharper_field_can_be_made_read_only_global_highlighting = suggestion +resharper_field_can_be_made_read_only_local_highlighting = suggestion +resharper_field_hides_interface_property_with_default_implementation_highlighting = warning +resharper_foreach_can_be_converted_to_query_using_another_get_enumerator_highlighting = hint +resharper_foreach_can_be_partly_converted_to_query_using_another_get_enumerator_highlighting = hint +resharper_format_string_placeholders_mismatch_highlighting = warning +resharper_format_string_problem_highlighting = warning +resharper_for_can_be_converted_to_foreach_highlighting = suggestion +resharper_for_statement_condition_is_true_highlighting = warning +resharper_function_complexity_overflow_highlighting = none +resharper_function_never_returns_highlighting = warning +resharper_function_recursive_on_all_paths_highlighting = warning +resharper_f_sharp_builtin_function_reimplementation_highlighting = hint +resharper_f_sharp_cons_with_empty_list_pat_highlighting = suggestion +resharper_f_sharp_dot_lambda_can_be_used_highlighting = hint +resharper_f_sharp_expression_can_be_replaced_with_condition_highlighting = hint +resharper_f_sharp_interpolated_string_highlighting = suggestion +resharper_f_sharp_lambda_can_be_replaced_with_inner_expression_highlighting = hint +resharper_f_sharp_lambda_can_be_simplified_highlighting = hint +resharper_f_sharp_redundant_application_highlighting = warning +resharper_f_sharp_redundant_as_pattern_highlighting = warning +resharper_f_sharp_redundant_attribute_parens_highlighting = warning +resharper_f_sharp_redundant_attribute_suffix_highlighting = warning +resharper_f_sharp_redundant_backticks_highlighting = warning +resharper_f_sharp_redundant_dot_in_indexer_highlighting = warning +resharper_f_sharp_redundant_name_qualifier_highlighting = warning +resharper_f_sharp_redundant_new_highlighting = warning +resharper_f_sharp_redundant_open_highlighting = warning +resharper_f_sharp_redundant_parens_highlighting = warning +resharper_f_sharp_redundant_require_qualified_access_attribute_highlighting = warning +resharper_f_sharp_redundant_string_interpolation_highlighting = suggestion +resharper_f_sharp_redundant_union_case_field_patterns_highlighting = warning +resharper_f_sharp_use_wild_self_id_highlighting = suggestion +resharper_gc_suppress_finalize_for_type_without_destructor_highlighting = warning +resharper_heuristic_unreachable_code_highlighting = warning +resharper_html_attributes_quotes_highlighting = hint +resharper_html_attribute_not_resolved_highlighting = warning +resharper_html_attribute_value_not_resolved_highlighting = warning +resharper_html_dead_code_highlighting = warning +resharper_html_event_not_resolved_highlighting = warning +resharper_html_id_duplication_highlighting = warning +resharper_html_id_not_resolved_highlighting = warning +resharper_html_obsolete_highlighting = warning +resharper_html_path_error_highlighting = warning +resharper_html_tag_not_closed_highlighting = error +resharper_html_tag_not_resolved_highlighting = warning +resharper_html_tag_should_be_self_closed_highlighting = warning +resharper_html_tag_should_not_be_self_closed_highlighting = warning +resharper_html_warning_highlighting = warning +resharper_identifier_typo_highlighting = suggestion +resharper_if_std_is_constant_evaluated_can_be_replaced_highlighting = suggestion +resharper_ignored_directive_highlighting = warning +resharper_inactive_preprocessor_branch_highlighting = warning +resharper_inconsistently_synchronized_field_highlighting = warning +resharper_inconsistent_naming_highlighting = warning +resharper_inconsistent_order_of_locks_highlighting = warning +resharper_incorrect_blank_lines_near_braces_highlighting = none +resharper_indexing_by_invalid_range_highlighting = warning +resharper_inheritdoc_consider_usage_highlighting = none +resharper_inheritdoc_invalid_usage_highlighting = warning +resharper_inline_out_variable_declaration_highlighting = suggestion +resharper_inline_temporary_variable_highlighting = hint +resharper_internal_or_private_member_not_documented_highlighting = none +resharper_interpolated_string_expression_is_not_i_formattable_highlighting = warning +resharper_introduce_optional_parameters_global_highlighting = suggestion +resharper_introduce_optional_parameters_local_highlighting = suggestion +resharper_int_division_by_zero_highlighting = warning +resharper_int_variable_overflow_highlighting = warning +resharper_int_variable_overflow_in_checked_context_highlighting = warning +resharper_int_variable_overflow_in_unchecked_context_highlighting = warning +resharper_invalid_value_type_highlighting = warning +resharper_invalid_xml_doc_comment_highlighting = warning +resharper_invert_condition_1_highlighting = hint +resharper_invert_if_highlighting = hint +resharper_invocation_is_skipped_highlighting = hint +resharper_invoke_as_extension_method_highlighting = suggestion +resharper_in_parameter_with_must_dispose_resource_attribute_highlighting = warning +resharper_is_expression_always_false_highlighting = warning +resharper_is_expression_always_true_highlighting = warning +resharper_iterator_method_result_is_ignored_highlighting = warning +resharper_iterator_never_returns_highlighting = warning +resharper_join_declaration_and_initializer_highlighting = suggestion +resharper_join_null_check_with_usage_highlighting = suggestion +resharper_lambda_expression_can_be_made_static_highlighting = none +resharper_lambda_expression_must_be_static_highlighting = suggestion +resharper_lambda_should_not_capture_context_highlighting = warning +resharper_localizable_element_highlighting = warning +resharper_local_function_can_be_made_static_highlighting = none +resharper_local_function_hides_method_highlighting = warning +resharper_local_variable_hides_member_highlighting = warning +resharper_local_variable_hides_primary_constructor_parameter_highlighting = warning +resharper_long_literal_ending_lower_l_highlighting = warning +resharper_loop_can_be_converted_to_query_highlighting = hint +resharper_loop_can_be_partly_converted_to_query_highlighting = none +resharper_loop_variable_is_never_changed_inside_loop_highlighting = warning +resharper_markup_attribute_typo_highlighting = suggestion +resharper_markup_text_typo_highlighting = suggestion +resharper_math_abs_method_is_redundant_highlighting = warning +resharper_math_clamp_min_greater_than_max_highlighting = warning +resharper_meaningless_default_parameter_value_highlighting = warning +resharper_member_can_be_file_local_highlighting = none +resharper_member_can_be_internal_highlighting = none +resharper_member_can_be_made_static_global_highlighting = hint +resharper_member_can_be_made_static_local_highlighting = hint +resharper_member_can_be_private_global_highlighting = suggestion +resharper_member_can_be_private_local_highlighting = suggestion +resharper_member_can_be_protected_global_highlighting = suggestion +resharper_member_can_be_protected_local_highlighting = suggestion +resharper_member_hides_interface_member_with_default_implementation_highlighting = warning +resharper_member_hides_static_from_outer_class_highlighting = warning +resharper_member_initializer_value_ignored_highlighting = warning +resharper_merge_and_pattern_highlighting = suggestion +resharper_merge_cast_with_type_check_highlighting = suggestion +resharper_merge_conditional_expression_highlighting = suggestion +resharper_merge_into_logical_pattern_highlighting = hint +resharper_merge_into_negated_pattern_highlighting = hint +resharper_merge_into_pattern_highlighting = suggestion +resharper_merge_nested_property_patterns_highlighting = suggestion +resharper_merge_sequential_checks_highlighting = hint +resharper_method_has_async_overload_highlighting = suggestion +resharper_method_has_async_overload_with_cancellation_highlighting = suggestion +resharper_method_overload_with_optional_parameter_highlighting = warning +resharper_method_supports_cancellation_highlighting = suggestion +resharper_mismatched_asmdef_filename_highlighting = suggestion +resharper_missing_alt_attribute_in_img_tag_highlighting = hint +resharper_missing_blank_lines_highlighting = none +resharper_missing_body_tag_highlighting = warning +resharper_missing_head_and_body_tags_highlighting = warning +resharper_missing_head_tag_highlighting = warning +resharper_missing_indent_highlighting = none +resharper_missing_linebreak_highlighting = none +resharper_missing_space_highlighting = none +resharper_more_specific_foreach_variable_type_available_highlighting = suggestion +resharper_move_local_function_after_jump_statement_highlighting = hint +resharper_move_to_existing_positional_deconstruction_pattern_highlighting = hint +resharper_move_variable_declaration_inside_loop_condition_highlighting = suggestion +resharper_multiple_nullable_attributes_usage_highlighting = warning +resharper_multiple_order_by_highlighting = warning +resharper_multiple_resolve_candidates_in_text_highlighting = warning +resharper_multiple_spaces_highlighting = none +resharper_multiple_statements_on_one_line_highlighting = none +resharper_multiple_type_members_on_one_line_highlighting = none +resharper_must_use_return_value_highlighting = warning +resharper_mvc_action_not_resolved_highlighting = error +resharper_mvc_area_not_resolved_highlighting = error +resharper_mvc_controller_not_resolved_highlighting = error +resharper_mvc_invalid_model_type_highlighting = error +resharper_mvc_masterpage_not_resolved_highlighting = error +resharper_mvc_partial_view_not_resolved_highlighting = error +resharper_mvc_template_not_resolved_highlighting = error +resharper_mvc_view_component_not_resolved_highlighting = error +resharper_mvc_view_component_view_not_resolved_highlighting = error +resharper_mvc_view_not_resolved_highlighting = error +resharper_negation_of_relational_pattern_highlighting = suggestion +resharper_negative_equality_expression_highlighting = suggestion +resharper_negative_index_highlighting = warning +resharper_nested_record_update_can_be_simplified_highlighting = suggestion +resharper_nested_string_interpolation_highlighting = suggestion +resharper_non_atomic_compound_operator_highlighting = warning +resharper_non_constant_equality_expression_has_constant_result_highlighting = warning +resharper_non_parsable_element_highlighting = warning +resharper_non_readonly_member_in_get_hash_code_highlighting = warning +resharper_non_volatile_field_in_double_check_locking_highlighting = warning +resharper_not_accessed_field_global_highlighting = suggestion +resharper_not_accessed_field_local_highlighting = warning +resharper_not_accessed_out_parameter_variable_highlighting = warning +resharper_not_accessed_positional_property_global_highlighting = warning +resharper_not_accessed_positional_property_local_highlighting = warning +resharper_not_accessed_variable_highlighting = warning +resharper_not_assigned_out_parameter_highlighting = warning +resharper_not_declared_in_parent_culture_highlighting = warning +resharper_not_disposed_resource_highlighting = warning +resharper_not_disposed_resource_is_returned_by_property_highlighting = warning +resharper_not_disposed_resource_is_returned_highlighting = warning +resharper_not_null_or_required_member_is_not_initialized_highlighting = warning +resharper_not_observable_annotation_redundancy_highlighting = warning +resharper_not_overridden_in_specific_culture_highlighting = warning +resharper_not_resolved_in_text_highlighting = warning +resharper_no_support_for_vb_highlighting = warning +resharper_nullable_warning_suppression_is_used_highlighting = none +resharper_nullness_annotation_conflict_with_jet_brains_annotations_highlighting = warning +resharper_null_coalescing_condition_is_always_not_null_according_to_api_contract_highlighting = warning +resharper_n_unit_async_method_must_be_task_highlighting = warning +resharper_n_unit_attribute_produces_too_many_tests_highlighting = none +resharper_n_unit_auto_fixture_incorrect_argument_type_highlighting = warning +resharper_n_unit_auto_fixture_missed_test_attribute_highlighting = warning +resharper_n_unit_auto_fixture_missed_test_or_test_fixture_attribute_highlighting = warning +resharper_n_unit_auto_fixture_redundant_argument_in_inline_auto_data_attribute_highlighting = warning +resharper_n_unit_duplicate_values_highlighting = warning +resharper_n_unit_ignored_parameter_attribute_highlighting = warning +resharper_n_unit_implicit_unspecified_null_values_highlighting = warning +resharper_n_unit_incorrect_argument_type_highlighting = warning +resharper_n_unit_incorrect_expected_result_type_highlighting = warning +resharper_n_unit_incorrect_range_bounds_highlighting = warning +resharper_n_unit_method_with_parameters_and_test_attribute_highlighting = warning +resharper_n_unit_missing_arguments_in_test_case_attribute_highlighting = warning +resharper_n_unit_non_public_method_with_test_attribute_highlighting = warning +resharper_n_unit_no_values_provided_highlighting = warning +resharper_n_unit_parameter_type_is_not_compatible_with_attribute_highlighting = warning +resharper_n_unit_range_attribute_bounds_are_out_of_range_highlighting = warning +resharper_n_unit_range_step_sign_mismatch_highlighting = warning +resharper_n_unit_range_step_value_must_not_be_zero_highlighting = warning +resharper_n_unit_range_to_value_is_not_reachable_highlighting = warning +resharper_n_unit_redundant_argument_instead_of_expected_result_highlighting = warning +resharper_n_unit_redundant_argument_in_test_case_attribute_highlighting = warning +resharper_n_unit_redundant_expected_result_in_test_case_attribute_highlighting = warning +resharper_n_unit_test_case_attribute_requires_expected_result_highlighting = warning +resharper_n_unit_test_case_result_property_duplicates_expected_result_highlighting = warning +resharper_n_unit_test_case_result_property_is_obsolete_highlighting = warning +resharper_n_unit_test_case_source_cannot_be_resolved_highlighting = warning +resharper_n_unit_test_case_source_must_be_field_property_method_highlighting = warning +resharper_n_unit_test_case_source_must_be_static_highlighting = warning +resharper_n_unit_test_case_source_should_implement_i_enumerable_highlighting = warning +resharper_object_creation_as_statement_highlighting = warning +resharper_obsolete_element_error_highlighting = error +resharper_obsolete_element_highlighting = warning +resharper_one_way_operation_contract_with_return_type_highlighting = warning +resharper_operation_contract_without_service_contract_highlighting = warning +resharper_operator_is_can_be_used_highlighting = warning +resharper_operator_without_matched_checked_operator_highlighting = warning +resharper_optional_parameter_hierarchy_mismatch_highlighting = warning +resharper_optional_parameter_ref_out_highlighting = warning +resharper_other_tags_inside_script1_highlighting = error +resharper_other_tags_inside_script2_highlighting = error +resharper_other_tags_inside_unclosed_script_highlighting = error +resharper_outdent_is_off_prev_level_highlighting = none +resharper_out_parameter_value_is_always_discarded_global_highlighting = suggestion +resharper_out_parameter_value_is_always_discarded_local_highlighting = warning +resharper_overridden_with_empty_value_highlighting = warning +resharper_overridden_with_same_value_highlighting = suggestion +resharper_parameter_hides_member_highlighting = warning +resharper_parameter_hides_primary_constructor_parameter_highlighting = warning +resharper_parameter_only_used_for_precondition_check_global_highlighting = suggestion +resharper_parameter_only_used_for_precondition_check_local_highlighting = warning +resharper_parameter_type_can_be_enumerable_global_highlighting = hint +resharper_parameter_type_can_be_enumerable_local_highlighting = hint +resharper_partial_method_parameter_name_mismatch_highlighting = warning +resharper_partial_method_with_single_part_highlighting = warning +resharper_partial_type_with_single_part_highlighting = warning +resharper_pass_string_interpolation_highlighting = hint +resharper_pattern_always_matches_highlighting = warning +resharper_pattern_is_always_true_or_false_highlighting = warning +resharper_pattern_is_redundant_highlighting = warning +resharper_pattern_never_matches_highlighting = warning +resharper_place_assignment_expression_into_block_highlighting = none +resharper_polymorphic_field_like_event_invocation_highlighting = warning +resharper_possible_infinite_inheritance_highlighting = warning +resharper_possible_intended_rethrow_highlighting = warning +resharper_possible_interface_member_ambiguity_highlighting = warning +resharper_possible_invalid_cast_exception_highlighting = warning +resharper_possible_invalid_cast_exception_in_foreach_loop_highlighting = warning +resharper_possible_invalid_operation_exception_highlighting = warning +resharper_possible_loss_of_fraction_highlighting = warning +resharper_possible_mistaken_argument_highlighting = warning +resharper_possible_mistaken_call_to_get_type_1_highlighting = warning +resharper_possible_mistaken_call_to_get_type_2_highlighting = warning +resharper_possible_multiple_enumeration_highlighting = warning +resharper_possible_multiple_write_access_in_double_check_locking_highlighting = warning +resharper_possible_null_reference_exception_highlighting = warning +resharper_possible_struct_member_modification_of_non_variable_struct_highlighting = warning +resharper_possible_unintended_linear_search_in_set_highlighting = warning +resharper_possible_unintended_queryable_as_enumerable_highlighting = suggestion +resharper_possible_unintended_reference_comparison_highlighting = warning +resharper_possible_write_to_me_highlighting = warning +resharper_possibly_impure_method_call_on_readonly_variable_highlighting = warning +resharper_possibly_missing_indexer_initializer_comma_highlighting = warning +resharper_possibly_mistaken_use_of_interpolated_string_insert_highlighting = warning +resharper_possibly_unintended_usage_parameterless_get_expression_type_highlighting = error +resharper_private_field_can_be_converted_to_local_variable_highlighting = warning +resharper_property_can_be_made_init_only_global_highlighting = suggestion +resharper_property_can_be_made_init_only_local_highlighting = suggestion +resharper_property_field_keyword_is_never_assigned_highlighting = warning +resharper_property_field_keyword_is_never_used_highlighting = warning +resharper_property_not_resolved_highlighting = error +resharper_public_constructor_in_abstract_class_highlighting = suggestion +resharper_pure_attribute_on_void_method_highlighting = warning +resharper_raw_string_can_be_simplified_highlighting = hint +resharper_razor_layout_not_resolved_highlighting = error +resharper_razor_section_not_resolved_highlighting = error +resharper_read_access_in_double_check_locking_highlighting = warning +resharper_redundant_abstract_modifier_highlighting = warning +resharper_redundant_accessor_body_highlighting = suggestion +resharper_redundant_always_match_subpattern_highlighting = suggestion +resharper_redundant_anonymous_type_property_name_highlighting = warning +resharper_redundant_argument_default_value_highlighting = warning +resharper_redundant_array_creation_expression_highlighting = hint +resharper_redundant_array_lower_bound_specification_highlighting = warning +resharper_redundant_assignment_highlighting = warning +resharper_redundant_attribute_parentheses_highlighting = hint +resharper_redundant_attribute_suffix_highlighting = warning +resharper_redundant_attribute_usage_property_highlighting = suggestion +resharper_redundant_base_constructor_call_highlighting = warning +resharper_redundant_base_qualifier_highlighting = warning +resharper_redundant_blank_lines_highlighting = none +resharper_redundant_bool_compare_highlighting = warning +resharper_redundant_caller_argument_expression_default_value_highlighting = warning +resharper_redundant_case_label_highlighting = warning +resharper_redundant_cast_highlighting = warning +resharper_redundant_catch_clause_highlighting = warning +resharper_redundant_check_before_assignment_highlighting = warning +resharper_redundant_collection_initializer_element_braces_highlighting = hint +resharper_redundant_configure_await_highlighting = suggestion +resharper_redundant_declaration_semicolon_highlighting = hint +resharper_redundant_default_member_initializer_highlighting = warning +resharper_redundant_delegate_creation_highlighting = warning +resharper_redundant_dictionary_contains_key_before_adding_highlighting = warning +resharper_redundant_disable_warning_comment_highlighting = warning +resharper_redundant_discard_designation_highlighting = suggestion +resharper_redundant_empty_case_else_highlighting = warning +resharper_redundant_empty_finally_block_highlighting = warning +resharper_redundant_empty_object_creation_argument_list_highlighting = hint +resharper_redundant_empty_object_or_collection_initializer_highlighting = warning +resharper_redundant_empty_switch_section_highlighting = warning +resharper_redundant_enumerable_cast_call_highlighting = warning +resharper_redundant_enum_case_label_for_default_section_highlighting = none +resharper_redundant_explicit_array_creation_highlighting = warning +resharper_redundant_explicit_array_size_highlighting = warning +resharper_redundant_explicit_nullable_creation_highlighting = warning +resharper_redundant_explicit_params_array_creation_highlighting = suggestion +resharper_redundant_explicit_positional_property_declaration_highlighting = warning +resharper_redundant_explicit_tuple_component_name_highlighting = warning +resharper_redundant_extends_list_entry_highlighting = warning +resharper_redundant_fixed_pointer_declaration_highlighting = suggestion +resharper_redundant_if_else_block_highlighting = hint +resharper_redundant_if_statement_then_keyword_highlighting = none +resharper_redundant_immediate_delegate_invocation_highlighting = suggestion +resharper_redundant_include_highlighting = warning +resharper_redundant_is_before_relational_pattern_highlighting = suggestion +resharper_redundant_iterator_keyword_highlighting = warning +resharper_redundant_jump_statement_highlighting = warning +resharper_redundant_lambda_parameter_type_highlighting = warning +resharper_redundant_lambda_signature_parentheses_highlighting = hint +resharper_redundant_linebreak_highlighting = none +resharper_redundant_logical_conditional_expression_operand_highlighting = warning +resharper_redundant_me_qualifier_highlighting = warning +resharper_redundant_my_base_qualifier_highlighting = warning +resharper_redundant_my_class_qualifier_highlighting = warning +resharper_redundant_name_qualifier_highlighting = warning +resharper_redundant_not_null_constraint_highlighting = warning +resharper_redundant_nullable_annotation_on_reference_type_constraint_highlighting = warning +resharper_redundant_nullable_annotation_on_type_constraint_has_non_nullable_base_type_highlighting = warning +resharper_redundant_nullable_annotation_on_type_constraint_has_non_nullable_type_kind_highlighting = warning +resharper_redundant_nullable_directive_highlighting = warning +resharper_redundant_nullable_flow_attribute_highlighting = warning +resharper_redundant_nullable_type_mark_highlighting = warning +resharper_redundant_nullness_attribute_with_nullable_reference_types_highlighting = warning +resharper_redundant_overflow_checking_context_highlighting = warning +resharper_redundant_overload_global_highlighting = suggestion +resharper_redundant_overload_local_highlighting = suggestion +resharper_redundant_overridden_member_highlighting = warning +resharper_redundant_params_highlighting = warning +resharper_redundant_parentheses_highlighting = none +resharper_redundant_pattern_parentheses_highlighting = hint +resharper_redundant_property_parentheses_highlighting = hint +resharper_redundant_property_pattern_clause_highlighting = suggestion +resharper_redundant_qualifier_highlighting = warning +resharper_redundant_query_order_by_ascending_keyword_highlighting = hint +resharper_redundant_range_bound_highlighting = suggestion +resharper_redundant_readonly_modifier_highlighting = suggestion +resharper_redundant_record_class_keyword_highlighting = warning +resharper_redundant_scoped_parameter_modifier_highlighting = warning +resharper_redundant_setter_value_parameter_declaration_highlighting = hint +resharper_redundant_space_highlighting = none +resharper_redundant_string_format_call_highlighting = warning +resharper_redundant_string_interpolation_highlighting = suggestion +resharper_redundant_string_to_char_array_call_highlighting = warning +resharper_redundant_string_type_highlighting = suggestion +resharper_redundant_suppress_nullable_warning_expression_highlighting = warning +resharper_redundant_ternary_expression_highlighting = warning +resharper_redundant_to_string_call_for_value_type_highlighting = hint +resharper_redundant_to_string_call_highlighting = warning +resharper_redundant_type_arguments_of_method_highlighting = warning +resharper_redundant_type_check_in_pattern_highlighting = warning +resharper_redundant_type_declaration_body_highlighting = warning +resharper_redundant_unsafe_context_highlighting = warning +resharper_redundant_using_directive_global_highlighting = warning +resharper_redundant_using_directive_highlighting = warning +resharper_redundant_verbatim_prefix_highlighting = suggestion +resharper_redundant_verbatim_string_prefix_highlighting = suggestion +resharper_redundant_virtual_modifier_highlighting = warning +resharper_redundant_with_cancellation_highlighting = warning +resharper_redundant_with_expression_highlighting = suggestion +resharper_reference_equals_with_value_type_highlighting = warning +resharper_reg_exp_inspections_highlighting = warning +resharper_remove_constructor_invocation_highlighting = none +resharper_remove_redundant_braces_highlighting = none +resharper_remove_redundant_or_statement_false_highlighting = suggestion +resharper_remove_redundant_or_statement_true_highlighting = suggestion +resharper_remove_to_list_1_highlighting = suggestion +resharper_remove_to_list_2_highlighting = suggestion +resharper_replace_async_with_task_return_highlighting = none +resharper_replace_auto_property_with_computed_property_highlighting = hint +resharper_replace_conditional_expression_with_null_coalescing_highlighting = suggestion +resharper_replace_object_pattern_with_var_pattern_highlighting = suggestion +resharper_replace_sequence_equal_with_constant_pattern_highlighting = suggestion +resharper_replace_slice_with_range_indexer_highlighting = hint +resharper_replace_substring_with_range_indexer_highlighting = hint +resharper_replace_with_field_keyword_highlighting = suggestion +resharper_replace_with_first_or_default_1_highlighting = suggestion +resharper_replace_with_first_or_default_2_highlighting = suggestion +resharper_replace_with_first_or_default_3_highlighting = suggestion +resharper_replace_with_first_or_default_4_highlighting = suggestion +resharper_replace_with_last_or_default_1_highlighting = suggestion +resharper_replace_with_last_or_default_2_highlighting = suggestion +resharper_replace_with_last_or_default_3_highlighting = suggestion +resharper_replace_with_last_or_default_4_highlighting = suggestion +resharper_replace_with_of_type_1_highlighting = suggestion +resharper_replace_with_of_type_2_highlighting = suggestion +resharper_replace_with_of_type_3_highlighting = suggestion +resharper_replace_with_of_type_any_1_highlighting = suggestion +resharper_replace_with_of_type_any_2_highlighting = suggestion +resharper_replace_with_of_type_count_1_highlighting = suggestion +resharper_replace_with_of_type_count_2_highlighting = suggestion +resharper_replace_with_of_type_first_1_highlighting = suggestion +resharper_replace_with_of_type_first_2_highlighting = suggestion +resharper_replace_with_of_type_first_or_default_1_highlighting = suggestion +resharper_replace_with_of_type_first_or_default_2_highlighting = suggestion +resharper_replace_with_of_type_last_1_highlighting = suggestion +resharper_replace_with_of_type_last_2_highlighting = suggestion +resharper_replace_with_of_type_last_or_default_1_highlighting = suggestion +resharper_replace_with_of_type_last_or_default_2_highlighting = suggestion +resharper_replace_with_of_type_long_count_highlighting = suggestion +resharper_replace_with_of_type_single_1_highlighting = suggestion +resharper_replace_with_of_type_single_2_highlighting = suggestion +resharper_replace_with_of_type_single_or_default_1_highlighting = suggestion +resharper_replace_with_of_type_single_or_default_2_highlighting = suggestion +resharper_replace_with_of_type_where_highlighting = suggestion +resharper_replace_with_primary_constructor_parameter_highlighting = suggestion +resharper_replace_with_simple_assignment_false_highlighting = suggestion +resharper_replace_with_simple_assignment_true_highlighting = suggestion +resharper_replace_with_single_assignment_false_highlighting = suggestion +resharper_replace_with_single_assignment_true_highlighting = suggestion +resharper_replace_with_single_call_to_any_highlighting = suggestion +resharper_replace_with_single_call_to_count_highlighting = suggestion +resharper_replace_with_single_call_to_first_highlighting = suggestion +resharper_replace_with_single_call_to_first_or_default_highlighting = suggestion +resharper_replace_with_single_call_to_last_highlighting = suggestion +resharper_replace_with_single_call_to_last_or_default_highlighting = suggestion +resharper_replace_with_single_call_to_single_highlighting = suggestion +resharper_replace_with_single_call_to_single_or_default_highlighting = suggestion +resharper_replace_with_single_or_default_1_highlighting = suggestion +resharper_replace_with_single_or_default_2_highlighting = suggestion +resharper_replace_with_single_or_default_3_highlighting = suggestion +resharper_replace_with_single_or_default_4_highlighting = suggestion +resharper_replace_with_string_is_null_or_empty_highlighting = suggestion +resharper_required_base_types_conflict_highlighting = warning +resharper_required_base_types_direct_conflict_highlighting = warning +resharper_required_base_types_is_not_inherited_highlighting = warning +resharper_resource_item_not_resolved_highlighting = error +resharper_resource_not_resolved_highlighting = error +resharper_resx_not_resolved_highlighting = warning +resharper_return_of_task_produced_by_using_variable_highlighting = warning +resharper_return_of_using_variable_highlighting = warning +resharper_return_type_can_be_enumerable_global_highlighting = hint +resharper_return_type_can_be_enumerable_local_highlighting = hint +resharper_return_type_can_be_not_nullable_highlighting = warning +resharper_return_value_of_pure_method_is_not_used_highlighting = warning +resharper_route_templates_action_route_prefix_can_be_extracted_to_controller_route_highlighting = hint +resharper_route_templates_ambiguous_matching_constraint_constructor_highlighting = warning +resharper_route_templates_constraint_argument_cannot_be_converted_highlighting = warning +resharper_route_templates_controller_route_parameter_is_not_passed_to_methods_highlighting = hint +resharper_route_templates_duplicated_parameter_highlighting = warning +resharper_route_templates_matching_constraint_constructor_not_resolved_highlighting = warning +resharper_route_templates_method_missing_route_parameters_highlighting = hint +resharper_route_templates_optional_parameter_can_be_preceded_only_by_single_period_highlighting = warning +resharper_route_templates_optional_parameter_must_be_at_the_end_of_segment_highlighting = warning +resharper_route_templates_parameter_constraint_can_be_specified_highlighting = hint +resharper_route_templates_parameter_type_and_constraints_mismatch_highlighting = warning +resharper_route_templates_parameter_type_can_be_made_stricter_highlighting = suggestion +resharper_route_templates_route_parameter_constraint_not_resolved_highlighting = warning +resharper_route_templates_route_parameter_is_not_passed_to_method_highlighting = hint +resharper_route_templates_route_token_not_resolved_highlighting = warning +resharper_route_templates_symbol_not_resolved_highlighting = warning +resharper_route_templates_syntax_error_highlighting = warning +resharper_safe_cast_is_used_as_type_check_highlighting = suggestion +resharper_script_tag_has_both_src_and_content_attributes_highlighting = error +resharper_sealed_member_in_sealed_class_highlighting = warning +resharper_separate_control_transfer_statement_highlighting = none +resharper_separate_local_functions_with_jump_statement_highlighting = hint +resharper_service_contract_without_operations_highlighting = warning +resharper_shift_expression_real_shift_count_is_zero_highlighting = warning +resharper_shift_expression_result_equals_zero_highlighting = warning +resharper_shift_expression_right_operand_not_equal_real_count_highlighting = warning +resharper_shift_expression_zero_left_operand_highlighting = warning +resharper_similar_anonymous_type_nearby_highlighting = hint +resharper_simplify_conditional_operator_highlighting = suggestion +resharper_simplify_conditional_ternary_expression_highlighting = suggestion +resharper_simplify_i_if_highlighting = suggestion +resharper_simplify_linq_expression_use_all_highlighting = suggestion +resharper_simplify_linq_expression_use_any_highlighting = suggestion +resharper_simplify_linq_expression_use_min_by_and_max_by_highlighting = suggestion +resharper_simplify_string_interpolation_highlighting = suggestion +resharper_specify_a_culture_in_string_conversion_explicitly_highlighting = warning +resharper_specify_string_comparison_highlighting = hint +resharper_spin_lock_in_readonly_field_highlighting = warning +resharper_stack_alloc_inside_loop_highlighting = warning +resharper_static_member_initializer_referes_to_member_below_highlighting = warning +resharper_static_member_in_generic_type_highlighting = warning +resharper_static_problem_in_text_highlighting = warning +resharper_std_is_constant_evaluated_will_always_evaluate_to_constant_highlighting = warning +resharper_string_compare_is_culture_specific_1_highlighting = warning +resharper_string_compare_is_culture_specific_2_highlighting = warning +resharper_string_compare_is_culture_specific_3_highlighting = warning +resharper_string_compare_is_culture_specific_4_highlighting = warning +resharper_string_compare_is_culture_specific_5_highlighting = warning +resharper_string_compare_is_culture_specific_6_highlighting = warning +resharper_string_compare_to_is_culture_specific_highlighting = warning +resharper_string_ends_with_is_culture_specific_highlighting = none +resharper_string_index_of_is_culture_specific_1_highlighting = warning +resharper_string_index_of_is_culture_specific_2_highlighting = warning +resharper_string_index_of_is_culture_specific_3_highlighting = warning +resharper_string_last_index_of_is_culture_specific_1_highlighting = warning +resharper_string_last_index_of_is_culture_specific_2_highlighting = warning +resharper_string_last_index_of_is_culture_specific_3_highlighting = warning +resharper_string_literal_as_interpolation_argument_highlighting = suggestion +resharper_string_literal_typo_highlighting = suggestion +resharper_string_starts_with_is_culture_specific_highlighting = none +resharper_structured_message_template_problem_highlighting = warning +resharper_struct_can_be_made_read_only_highlighting = suggestion +resharper_struct_member_can_be_made_read_only_highlighting = none +resharper_suggest_base_type_for_parameter_highlighting = hint +resharper_suggest_base_type_for_parameter_in_constructor_highlighting = hint +resharper_suggest_discard_declaration_var_style_highlighting = hint +resharper_suggest_var_or_type_built_in_types_highlighting = hint +resharper_suggest_var_or_type_deconstruction_declarations_highlighting = hint +resharper_suggest_var_or_type_elsewhere_highlighting = hint +resharper_suggest_var_or_type_simple_types_highlighting = hint +resharper_suppress_nullable_warning_expression_as_inverted_is_expression_highlighting = warning +resharper_suspicious_lock_over_synchronization_primitive_highlighting = warning +resharper_suspicious_math_sign_method_highlighting = warning +resharper_suspicious_parameter_name_in_argument_null_exception_highlighting = warning +resharper_suspicious_type_conversion_global_highlighting = warning +resharper_swap_via_deconstruction_highlighting = suggestion +resharper_switch_expression_handles_some_known_enum_values_with_exception_in_default_highlighting = hint +resharper_switch_statement_for_enum_misses_default_section_highlighting = hint +resharper_switch_statement_handles_some_known_enum_values_with_default_highlighting = hint +resharper_switch_statement_missing_some_enum_cases_no_default_highlighting = hint +resharper_symbol_from_not_copied_locally_reference_used_warning_highlighting = warning +resharper_tabs_and_spaces_mismatch_highlighting = none +resharper_tabs_are_disallowed_highlighting = none +resharper_tabs_outside_indent_highlighting = none +resharper_tail_recursive_call_highlighting = hint +resharper_thread_static_at_instance_field_highlighting = warning +resharper_thread_static_field_has_initializer_highlighting = warning +resharper_too_wide_local_variable_scope_highlighting = suggestion +resharper_try_cast_always_succeeds_highlighting = suggestion +resharper_try_statements_can_be_merged_highlighting = hint +resharper_type_parameter_can_be_variant_highlighting = suggestion +resharper_unassigned_field_global_highlighting = suggestion +resharper_unassigned_field_local_highlighting = warning +resharper_unassigned_get_only_auto_property_highlighting = warning +resharper_unassigned_readonly_field_highlighting = warning +resharper_unclosed_script_highlighting = error +resharper_unexpected_attribute_highlighting = warning +resharper_unexpected_directive_highlighting = warning +resharper_unity_burst_accessing_managed_indexer_highlighting = warning +resharper_unity_burst_accessing_managed_method_highlighting = warning +resharper_unity_burst_boxing_not_supported_highlighting = warning +resharper_unity_burst_creating_managed_type_highlighting = warning +resharper_unity_burst_debug_log_invalid_argument_highlighting = warning +resharper_unity_burst_foreach_not_supported_highlighting = warning +resharper_unity_burst_function_signature_contains_managed_types_highlighting = warning +resharper_unity_burst_loading_managed_type_highlighting = warning +resharper_unity_burst_loading_static_not_readonly_highlighting = warning +resharper_unity_burst_local_string_variable_declaration_highlighting = suggestion +resharper_unity_burst_shared_static_create_highlighting = warning +resharper_unity_burst_string_format_invalid_argument_highlighting = warning +resharper_unity_burst_string_format_invalid_format_highlighting = warning +resharper_unity_burst_try_not_supported_highlighting = warning +resharper_unity_burst_typeof_expression_highlighting = warning +resharper_unity_burst_write_static_field_highlighting = warning +resharper_unity_duplicate_event_function_highlighting = warning +resharper_unity_duplicate_shortcut_highlighting = warning +resharper_unity_entities_aspect_wrong_fields_type_highlighting = error +resharper_unity_entities_inconsistent_modifiers_for_dots_inheritor_highlighting = error +resharper_unity_entities_must_be_struct_for_dots_inheritor_highlighting = error +resharper_unity_entities_not_updated_component_lookup_highlighting = warning +resharper_unity_entities_singleton_must_be_requested_highlighting = warning +resharper_unity_expected_component_highlighting = warning +resharper_unity_expected_scriptable_object_highlighting = warning +resharper_unity_explicit_tag_comparison_highlighting = warning +resharper_unity_incorrect_method_signature_highlighting = warning +resharper_unity_incorrect_method_signature_in_string_literal_highlighting = warning +resharper_unity_incorrect_mono_behaviour_instantiation_highlighting = warning +resharper_unity_incorrect_scriptable_object_instantiation_highlighting = warning +resharper_unity_inefficient_multidimensional_array_usage_highlighting = warning +resharper_unity_inefficient_multiplication_order_highlighting = warning +resharper_unity_inefficient_property_access_highlighting = warning +resharper_unity_instantiate_without_parent_highlighting = warning +resharper_unity_load_scene_ambiguous_scene_name_highlighting = warning +resharper_unity_load_scene_disabled_scene_name_highlighting = warning +resharper_unity_load_scene_unexisting_scene_highlighting = warning +resharper_unity_load_scene_unknown_scene_name_highlighting = warning +resharper_unity_load_scene_wrong_index_highlighting = warning +resharper_unity_no_null_coalescing_highlighting = warning +resharper_unity_no_null_propagation_highlighting = warning +resharper_unity_parameter_not_derived_from_component_highlighting = warning +resharper_unity_performance_critical_code_camera_main_highlighting = hint +resharper_unity_performance_critical_code_invocation_highlighting = hint +resharper_unity_performance_critical_code_null_comparison_highlighting = hint +resharper_unity_possible_misapplication_of_attribute_to_multiple_fields_highlighting = warning +resharper_unity_prefer_address_by_id_to_graphics_params_highlighting = warning +resharper_unity_prefer_generic_method_overload_highlighting = warning +resharper_unity_prefer_guid_reference_highlighting = hint +resharper_unity_prefer_non_alloc_api_highlighting = warning +resharper_unity_property_drawer_on_gui_base_highlighting = warning +resharper_unity_redundant_attribute_on_target_highlighting = warning +resharper_unity_redundant_event_function_highlighting = warning +resharper_unity_redundant_formerly_serialized_as_attribute_highlighting = warning +resharper_unity_redundant_hide_in_inspector_attribute_highlighting = warning +resharper_unity_redundant_initialize_on_load_attribute_highlighting = warning +resharper_unity_redundant_serialize_field_attribute_highlighting = warning +resharper_unity_shared_static_unmanaged_type_highlighting = warning +resharper_unity_unknown_animator_state_name_highlighting = warning +resharper_unity_unknown_input_axes_highlighting = warning +resharper_unity_unknown_layer_highlighting = warning +resharper_unity_unknown_resource_highlighting = warning +resharper_unity_unknown_tag_highlighting = warning +resharper_unity_unresolved_component_or_scriptable_object_highlighting = warning +resharper_unnecessary_whitespace_highlighting = none +resharper_unreachable_switch_arm_due_to_integer_analysis_highlighting = warning +resharper_unreachable_switch_case_due_to_integer_analysis_highlighting = warning +resharper_unreal_header_tool_error_highlighting = error +resharper_unreal_header_tool_warning_highlighting = warning +resharper_unsupported_required_base_type_highlighting = warning +resharper_unused_anonymous_method_signature_highlighting = warning +resharper_unused_auto_property_accessor_global_highlighting = warning +resharper_unused_auto_property_accessor_local_highlighting = warning +resharper_unused_import_clause_highlighting = warning +resharper_unused_local_function_highlighting = warning +resharper_unused_local_function_parameter_highlighting = warning +resharper_unused_local_function_return_value_highlighting = warning +resharper_unused_member_global_highlighting = suggestion +resharper_unused_member_hierarchy_global_highlighting = suggestion +resharper_unused_member_hierarchy_local_highlighting = warning +resharper_unused_member_in_super_global_highlighting = suggestion +resharper_unused_member_in_super_local_highlighting = warning +resharper_unused_member_local_highlighting = warning +resharper_unused_method_return_value_global_highlighting = suggestion +resharper_unused_method_return_value_local_highlighting = warning +resharper_unused_nullable_directive_highlighting = warning +resharper_unused_parameter_global_highlighting = suggestion +resharper_unused_parameter_in_partial_method_highlighting = warning +resharper_unused_parameter_local_highlighting = warning +resharper_unused_tuple_component_in_return_value_highlighting = warning +resharper_unused_type_global_highlighting = suggestion +resharper_unused_type_local_highlighting = warning +resharper_unused_type_parameter_highlighting = warning +resharper_unused_variable_highlighting = warning +resharper_useless_binary_operation_highlighting = warning +resharper_useless_comparison_to_integral_constant_highlighting = warning +resharper_use_array_creation_expression_1_highlighting = suggestion +resharper_use_array_creation_expression_2_highlighting = suggestion +resharper_use_array_empty_method_highlighting = suggestion +resharper_use_await_using_highlighting = suggestion +resharper_use_cancellation_token_for_i_async_enumerable_highlighting = suggestion +resharper_use_collection_count_property_highlighting = suggestion +resharper_use_collection_expression_highlighting = suggestion +resharper_use_configure_await_false_for_async_disposable_highlighting = none +resharper_use_configure_await_false_highlighting = suggestion +resharper_use_deconstruction_highlighting = hint +resharper_use_discard_assignment_highlighting = suggestion +resharper_use_empty_types_field_highlighting = suggestion +resharper_use_event_args_empty_field_highlighting = suggestion +resharper_use_format_specifier_in_format_string_highlighting = suggestion +resharper_use_implicitly_typed_variable_evident_highlighting = hint +resharper_use_implicitly_typed_variable_highlighting = none +resharper_use_implicit_by_val_modifier_highlighting = hint +resharper_use_indexed_property_highlighting = suggestion +resharper_use_index_from_end_expression_highlighting = suggestion +resharper_use_is_operator_1_highlighting = suggestion +resharper_use_is_operator_2_highlighting = suggestion +resharper_use_method_any_0_highlighting = suggestion +resharper_use_method_any_1_highlighting = suggestion +resharper_use_method_any_2_highlighting = suggestion +resharper_use_method_any_3_highlighting = suggestion +resharper_use_method_any_4_highlighting = suggestion +resharper_use_method_is_instance_of_type_highlighting = suggestion +resharper_use_nameof_expression_for_part_of_the_string_highlighting = none +resharper_use_nameof_expression_highlighting = suggestion +resharper_use_nameof_for_dependency_property_highlighting = suggestion +resharper_use_name_of_instead_of_type_of_highlighting = suggestion +resharper_use_negated_pattern_in_is_expression_highlighting = hint +resharper_use_negated_pattern_matching_highlighting = hint +resharper_use_nullable_annotation_instead_of_attribute_highlighting = suggestion +resharper_use_nullable_attributes_supported_by_compiler_highlighting = suggestion +resharper_use_nullable_reference_types_annotation_syntax_highlighting = warning +resharper_use_null_propagation_highlighting = hint +resharper_use_object_or_collection_initializer_highlighting = suggestion +resharper_use_pattern_matching_highlighting = suggestion +resharper_use_positional_deconstruction_pattern_highlighting = none +resharper_use_raw_string_highlighting = hint +resharper_use_string_interpolation_highlighting = suggestion +resharper_use_string_interpolation_when_possible_highlighting = hint +resharper_use_switch_case_pattern_variable_highlighting = suggestion +resharper_use_symbol_alias_highlighting = hint +resharper_use_throw_if_null_method_highlighting = none +resharper_use_unsigned_right_shift_operator_highlighting = suggestion +resharper_use_verbatim_string_highlighting = hint +resharper_use_with_expression_to_copy_anonymous_object_highlighting = suggestion +resharper_use_with_expression_to_copy_record_highlighting = suggestion +resharper_use_with_expression_to_copy_struct_highlighting = suggestion +resharper_use_with_expression_to_copy_tuple_highlighting = suggestion +resharper_using_statement_resource_initialization_expression_highlighting = hint +resharper_using_statement_resource_initialization_highlighting = warning +resharper_value_parameter_not_used_highlighting = warning +resharper_value_range_attribute_violation_highlighting = warning +resharper_variable_can_be_not_nullable_highlighting = warning +resharper_variable_hides_outer_variable_highlighting = warning +resharper_vb_check_for_reference_equality_instead_1_highlighting = suggestion +resharper_vb_check_for_reference_equality_instead_2_highlighting = suggestion +resharper_vb_possible_mistaken_argument_highlighting = warning +resharper_vb_possible_mistaken_call_to_get_type_1_highlighting = warning +resharper_vb_possible_mistaken_call_to_get_type_2_highlighting = warning +resharper_vb_remove_to_list_1_highlighting = suggestion +resharper_vb_remove_to_list_2_highlighting = suggestion +resharper_vb_replace_with_first_or_default_highlighting = suggestion +resharper_vb_replace_with_last_or_default_highlighting = suggestion +resharper_vb_replace_with_of_type_1_highlighting = suggestion +resharper_vb_replace_with_of_type_2_highlighting = suggestion +resharper_vb_replace_with_of_type_any_1_highlighting = suggestion +resharper_vb_replace_with_of_type_any_2_highlighting = suggestion +resharper_vb_replace_with_of_type_count_1_highlighting = suggestion +resharper_vb_replace_with_of_type_count_2_highlighting = suggestion +resharper_vb_replace_with_of_type_first_1_highlighting = suggestion +resharper_vb_replace_with_of_type_first_2_highlighting = suggestion +resharper_vb_replace_with_of_type_first_or_default_1_highlighting = suggestion +resharper_vb_replace_with_of_type_first_or_default_2_highlighting = suggestion +resharper_vb_replace_with_of_type_last_1_highlighting = suggestion +resharper_vb_replace_with_of_type_last_2_highlighting = suggestion +resharper_vb_replace_with_of_type_last_or_default_1_highlighting = suggestion +resharper_vb_replace_with_of_type_last_or_default_2_highlighting = suggestion +resharper_vb_replace_with_of_type_single_1_highlighting = suggestion +resharper_vb_replace_with_of_type_single_2_highlighting = suggestion +resharper_vb_replace_with_of_type_single_or_default_1_highlighting = suggestion +resharper_vb_replace_with_of_type_single_or_default_2_highlighting = suggestion +resharper_vb_replace_with_of_type_where_highlighting = suggestion +resharper_vb_replace_with_single_assignment_1_highlighting = suggestion +resharper_vb_replace_with_single_assignment_2_highlighting = suggestion +resharper_vb_replace_with_single_call_to_any_highlighting = suggestion +resharper_vb_replace_with_single_call_to_count_highlighting = suggestion +resharper_vb_replace_with_single_call_to_first_highlighting = suggestion +resharper_vb_replace_with_single_call_to_first_or_default_highlighting = suggestion +resharper_vb_replace_with_single_call_to_last_highlighting = suggestion +resharper_vb_replace_with_single_call_to_last_or_default_highlighting = suggestion +resharper_vb_replace_with_single_call_to_single_highlighting = suggestion +resharper_vb_replace_with_single_call_to_single_or_default_highlighting = suggestion +resharper_vb_replace_with_single_or_default_highlighting = suggestion +resharper_vb_simplify_linq_expression_10_highlighting = hint +resharper_vb_simplify_linq_expression_1_highlighting = suggestion +resharper_vb_simplify_linq_expression_2_highlighting = suggestion +resharper_vb_simplify_linq_expression_3_highlighting = suggestion +resharper_vb_simplify_linq_expression_4_highlighting = suggestion +resharper_vb_simplify_linq_expression_5_highlighting = suggestion +resharper_vb_simplify_linq_expression_6_highlighting = suggestion +resharper_vb_simplify_linq_expression_7_highlighting = hint +resharper_vb_simplify_linq_expression_8_highlighting = hint +resharper_vb_simplify_linq_expression_9_highlighting = hint +resharper_vb_string_compare_is_culture_specific_1_highlighting = warning +resharper_vb_string_compare_is_culture_specific_2_highlighting = warning +resharper_vb_string_compare_is_culture_specific_3_highlighting = warning +resharper_vb_string_compare_is_culture_specific_4_highlighting = warning +resharper_vb_string_compare_is_culture_specific_5_highlighting = warning +resharper_vb_string_compare_is_culture_specific_6_highlighting = warning +resharper_vb_string_compare_to_is_culture_specific_highlighting = warning +resharper_vb_string_ends_with_is_culture_specific_highlighting = none +resharper_vb_string_index_of_is_culture_specific_1_highlighting = warning +resharper_vb_string_index_of_is_culture_specific_2_highlighting = warning +resharper_vb_string_index_of_is_culture_specific_3_highlighting = warning +resharper_vb_string_last_index_of_is_culture_specific_1_highlighting = warning +resharper_vb_string_last_index_of_is_culture_specific_2_highlighting = warning +resharper_vb_string_last_index_of_is_culture_specific_3_highlighting = warning +resharper_vb_string_starts_with_is_culture_specific_highlighting = none +resharper_vb_unreachable_code_highlighting = warning +resharper_vb_use_array_creation_expression_1_highlighting = suggestion +resharper_vb_use_array_creation_expression_2_highlighting = suggestion +resharper_vb_use_first_instead_highlighting = warning +resharper_vb_use_method_any_1_highlighting = suggestion +resharper_vb_use_method_any_2_highlighting = suggestion +resharper_vb_use_method_any_3_highlighting = suggestion +resharper_vb_use_method_any_4_highlighting = suggestion +resharper_vb_use_method_any_5_highlighting = suggestion +resharper_vb_use_method_is_instance_of_type_highlighting = suggestion +resharper_vb_use_type_of_is_operator_1_highlighting = suggestion +resharper_vb_use_type_of_is_operator_2_highlighting = suggestion +resharper_virtual_member_call_in_constructor_highlighting = warning +resharper_virtual_member_never_overridden_global_highlighting = suggestion +resharper_virtual_member_never_overridden_local_highlighting = suggestion +resharper_void_method_with_must_dispose_resource_attribute_highlighting = warning +resharper_void_method_with_must_use_return_value_attribute_highlighting = warning +resharper_vulnerable_api_highlighting = warning +resharper_web_config_module_not_resolved_highlighting = warning +resharper_web_config_module_qualification_resolve_highlighting = warning +resharper_web_config_redundant_add_namespace_tag_highlighting = warning +resharper_web_config_redundant_location_tag_highlighting = warning +resharper_web_config_tag_prefix_redundand_highlighting = warning +resharper_web_config_type_not_resolved_highlighting = warning +resharper_web_config_unused_add_tag_highlighting = warning +resharper_web_config_unused_element_due_to_config_source_attribute_highlighting = warning +resharper_web_config_unused_remove_or_clear_tag_highlighting = warning +resharper_web_config_web_config_path_warning_highlighting = warning +resharper_web_config_wrong_module_highlighting = warning +resharper_web_ignored_path_highlighting = none +resharper_web_mapped_path_highlighting = hint +resharper_with_expression_instead_of_initializer_highlighting = suggestion +resharper_with_expression_modifies_all_members_highlighting = warning +resharper_wrong_indent_size_highlighting = none +resharper_xaml_assign_null_to_not_null_attribute_highlighting = warning +resharper_xaml_avalonia_wrong_binding_mode_for_stream_binding_operator_highlighting = warning +resharper_xaml_binding_without_context_not_resolved_highlighting = hint +resharper_xaml_binding_with_context_not_resolved_highlighting = warning +resharper_xaml_compiled_binding_missing_data_type_error_highlighting_highlighting = error +resharper_xaml_constructor_warning_highlighting = warning +resharper_xaml_decimal_parsing_is_culture_dependent_highlighting = warning +resharper_xaml_dependency_property_resolve_error_highlighting = warning +resharper_xaml_duplicate_style_setter_highlighting = warning +resharper_xaml_dynamic_resource_error_highlighting = error +resharper_xaml_element_name_reference_not_resolved_highlighting = error +resharper_xaml_empty_grid_length_definition_highlighting = error +resharper_xaml_field_modifier_requires_name_attribute_highlighting = warning +resharper_xaml_grid_definitions_can_be_converted_to_attribute_highlighting = hint +resharper_xaml_ignored_path_highlighting_highlighting = none +resharper_xaml_index_out_of_grid_definition_highlighting = warning +resharper_xaml_invalid_member_type_highlighting = error +resharper_xaml_invalid_resource_target_type_highlighting = error +resharper_xaml_invalid_resource_type_highlighting = error +resharper_xaml_invalid_type_highlighting = error +resharper_xaml_language_level_highlighting = error +resharper_xaml_mapped_path_highlighting_highlighting = hint +resharper_xaml_method_arguments_will_be_ignored_highlighting = warning +resharper_xaml_missing_grid_index_highlighting = warning +resharper_xaml_overloads_collision_highlighting = warning +resharper_xaml_parent_is_out_of_current_component_tree_highlighting = warning +resharper_xaml_path_error_highlighting = warning +resharper_xaml_possible_null_reference_exception_highlighting = suggestion +resharper_xaml_redundant_attached_property_highlighting = warning +resharper_xaml_redundant_binding_mode_attribute_highlighting = warning +resharper_xaml_redundant_collection_property_highlighting = warning +resharper_xaml_redundant_freeze_attribute_highlighting = warning +resharper_xaml_redundant_grid_definitions_highlighting = warning +resharper_xaml_redundant_grid_span_highlighting = warning +resharper_xaml_redundant_modifiers_attribute_highlighting = warning +resharper_xaml_redundant_namespace_alias_highlighting = warning +resharper_xaml_redundant_name_attribute_highlighting = warning +resharper_xaml_redundant_property_type_qualifier_highlighting = warning +resharper_xaml_redundant_resource_highlighting = warning +resharper_xaml_redundant_styled_value_highlighting = warning +resharper_xaml_redundant_update_source_trigger_attribute_highlighting = warning +resharper_xaml_redundant_xamarin_forms_class_declaration_highlighting = warning +resharper_xaml_resource_file_path_case_mismatch_highlighting = warning +resharper_xaml_routed_event_resolve_error_highlighting = warning +resharper_xaml_static_resource_not_resolved_highlighting = warning +resharper_xaml_style_class_not_found_highlighting = warning +resharper_xaml_style_invalid_target_type_highlighting = error +resharper_xaml_unexpected_element_highlighting = error +resharper_xaml_unexpected_text_token_highlighting = error +resharper_xaml_xaml_duplicate_device_family_type_view_highlighting_highlighting = error +resharper_xaml_xaml_mismatched_device_family_view_clr_name_highlighting_highlighting = warning +resharper_xaml_xaml_relative_source_default_mode_warning_highlighting_highlighting = warning +resharper_xaml_xaml_unknown_device_family_type_highlighting_highlighting = warning +resharper_xaml_xaml_xamarin_forms_data_type_and_binding_context_type_mismatched_highlighting_highlighting = warning +resharper_xaml_x_key_attribute_disallowed_highlighting = error +resharper_xunit_xunit_test_with_console_output_highlighting = warning +resharper_zero_index_from_end_highlighting = warning + +[{*.har,*.jsb2,*.jsb3,*.json,*.jsonc,*.postman_collection,*.postman_collection.json,*.postman_environment,*.postman_environment.json,.babelrc,.eslintrc,.prettierrc,.stylelintrc,bowerrc,jest.config}] +indent_style = space +indent_size = 2 -# Wrapping preferences -csharp_preserve_single_line_blocks = true -csharp_preserve_single_line_statements = true - -#### Naming styles #### -[*.{cs,vb}] - -# Naming rules - -dotnet_naming_rule.types_and_namespaces_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.types_and_namespaces_should_be_pascalcase.symbols = types_and_namespaces -dotnet_naming_rule.types_and_namespaces_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.interfaces_should_be_ipascalcase.severity = suggestion -dotnet_naming_rule.interfaces_should_be_ipascalcase.symbols = interfaces -dotnet_naming_rule.interfaces_should_be_ipascalcase.style = ipascalcase - -dotnet_naming_rule.type_parameters_should_be_tpascalcase.severity = suggestion -dotnet_naming_rule.type_parameters_should_be_tpascalcase.symbols = type_parameters -dotnet_naming_rule.type_parameters_should_be_tpascalcase.style = tpascalcase - -dotnet_naming_rule.methods_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.methods_should_be_pascalcase.symbols = methods -dotnet_naming_rule.methods_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.properties_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.properties_should_be_pascalcase.symbols = properties -dotnet_naming_rule.properties_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.events_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.events_should_be_pascalcase.symbols = events -dotnet_naming_rule.events_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.local_variables_should_be_camelcase.severity = suggestion -dotnet_naming_rule.local_variables_should_be_camelcase.symbols = local_variables -dotnet_naming_rule.local_variables_should_be_camelcase.style = camelcase - -dotnet_naming_rule.local_constants_should_be_camelcase.severity = suggestion -dotnet_naming_rule.local_constants_should_be_camelcase.symbols = local_constants -dotnet_naming_rule.local_constants_should_be_camelcase.style = camelcase - -dotnet_naming_rule.parameters_should_be_camelcase.severity = suggestion -dotnet_naming_rule.parameters_should_be_camelcase.symbols = parameters -dotnet_naming_rule.parameters_should_be_camelcase.style = camelcase - -dotnet_naming_rule.public_fields_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.public_fields_should_be_pascalcase.symbols = public_fields -dotnet_naming_rule.public_fields_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.private_fields_should_be__camelcase.severity = suggestion -dotnet_naming_rule.private_fields_should_be__camelcase.symbols = private_fields -dotnet_naming_rule.private_fields_should_be__camelcase.style = _camelcase - -dotnet_naming_rule.public_constant_fields_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.public_constant_fields_should_be_pascalcase.symbols = public_constant_fields -dotnet_naming_rule.public_constant_fields_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.private_constant_fields_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.private_constant_fields_should_be_pascalcase.symbols = private_constant_fields -dotnet_naming_rule.private_constant_fields_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.public_static_readonly_fields_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.public_static_readonly_fields_should_be_pascalcase.symbols = public_static_readonly_fields -dotnet_naming_rule.public_static_readonly_fields_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.private_static_readonly_fields_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.private_static_readonly_fields_should_be_pascalcase.symbols = private_static_readonly_fields -dotnet_naming_rule.private_static_readonly_fields_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.enums_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.enums_should_be_pascalcase.symbols = enums -dotnet_naming_rule.enums_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.local_functions_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.local_functions_should_be_pascalcase.symbols = local_functions -dotnet_naming_rule.local_functions_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.non_field_members_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.non_field_members_should_be_pascalcase.symbols = non_field_members -dotnet_naming_rule.non_field_members_should_be_pascalcase.style = pascalcase - -# Symbol specifications - -dotnet_naming_symbols.interfaces.applicable_kinds = interface -dotnet_naming_symbols.interfaces.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.interfaces.required_modifiers = - -dotnet_naming_symbols.enums.applicable_kinds = enum -dotnet_naming_symbols.enums.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.enums.required_modifiers = - -dotnet_naming_symbols.events.applicable_kinds = event -dotnet_naming_symbols.events.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.events.required_modifiers = - -dotnet_naming_symbols.methods.applicable_kinds = method -dotnet_naming_symbols.methods.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.methods.required_modifiers = - -dotnet_naming_symbols.properties.applicable_kinds = property -dotnet_naming_symbols.properties.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.properties.required_modifiers = - -dotnet_naming_symbols.public_fields.applicable_kinds = field -dotnet_naming_symbols.public_fields.applicable_accessibilities = public, internal -dotnet_naming_symbols.public_fields.required_modifiers = - -dotnet_naming_symbols.private_fields.applicable_kinds = field -dotnet_naming_symbols.private_fields.applicable_accessibilities = private, protected, protected_internal, private_protected -dotnet_naming_symbols.private_fields.required_modifiers = - -dotnet_naming_symbols.private_static_fields.applicable_kinds = field -dotnet_naming_symbols.private_static_fields.applicable_accessibilities = private, protected, protected_internal, private_protected -dotnet_naming_symbols.private_static_fields.required_modifiers = static - -dotnet_naming_symbols.types_and_namespaces.applicable_kinds = namespace, class, struct, interface, enum -dotnet_naming_symbols.types_and_namespaces.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.types_and_namespaces.required_modifiers = - -dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method -dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.non_field_members.required_modifiers = - -dotnet_naming_symbols.type_parameters.applicable_kinds = namespace -dotnet_naming_symbols.type_parameters.applicable_accessibilities = * -dotnet_naming_symbols.type_parameters.required_modifiers = - -dotnet_naming_symbols.private_constant_fields.applicable_kinds = field -dotnet_naming_symbols.private_constant_fields.applicable_accessibilities = private, protected, protected_internal, private_protected -dotnet_naming_symbols.private_constant_fields.required_modifiers = const - -dotnet_naming_symbols.local_variables.applicable_kinds = local -dotnet_naming_symbols.local_variables.applicable_accessibilities = local -dotnet_naming_symbols.local_variables.required_modifiers = - -dotnet_naming_symbols.local_constants.applicable_kinds = local -dotnet_naming_symbols.local_constants.applicable_accessibilities = local -dotnet_naming_symbols.local_constants.required_modifiers = const - -dotnet_naming_symbols.parameters.applicable_kinds = parameter -dotnet_naming_symbols.parameters.applicable_accessibilities = * -dotnet_naming_symbols.parameters.required_modifiers = - -dotnet_naming_symbols.public_constant_fields.applicable_kinds = field -dotnet_naming_symbols.public_constant_fields.applicable_accessibilities = public, internal -dotnet_naming_symbols.public_constant_fields.required_modifiers = const - -dotnet_naming_symbols.public_static_readonly_fields.applicable_kinds = field -dotnet_naming_symbols.public_static_readonly_fields.applicable_accessibilities = public, internal -dotnet_naming_symbols.public_static_readonly_fields.required_modifiers = readonly, static - -dotnet_naming_symbols.private_static_readonly_fields.applicable_kinds = field -dotnet_naming_symbols.private_static_readonly_fields.applicable_accessibilities = private, protected, protected_internal, private_protected -dotnet_naming_symbols.private_static_readonly_fields.required_modifiers = readonly, static - -dotnet_naming_symbols.local_functions.applicable_kinds = local_function -dotnet_naming_symbols.local_functions.applicable_accessibilities = * -dotnet_naming_symbols.local_functions.required_modifiers = - -# Naming styles - -dotnet_naming_style.pascalcase.required_prefix = -dotnet_naming_style.pascalcase.required_suffix = -dotnet_naming_style.pascalcase.word_separator = -dotnet_naming_style.pascalcase.capitalization = pascal_case - -dotnet_naming_style.ipascalcase.required_prefix = I -dotnet_naming_style.ipascalcase.required_suffix = -dotnet_naming_style.ipascalcase.word_separator = -dotnet_naming_style.ipascalcase.capitalization = pascal_case - -dotnet_naming_style.tpascalcase.required_prefix = T -dotnet_naming_style.tpascalcase.required_suffix = -dotnet_naming_style.tpascalcase.word_separator = -dotnet_naming_style.tpascalcase.capitalization = pascal_case - -dotnet_naming_style._camelcase.required_prefix = _ -dotnet_naming_style._camelcase.required_suffix = -dotnet_naming_style._camelcase.word_separator = -dotnet_naming_style._camelcase.capitalization = camel_case - -dotnet_naming_style.camelcase.required_prefix = -dotnet_naming_style.camelcase.required_suffix = -dotnet_naming_style.camelcase.word_separator = -dotnet_naming_style.camelcase.capitalization = camel_case +[{*.yaml,*.yml}] +indent_style = space +indent_size = 2 -dotnet_naming_style.s_camelcase.required_prefix = s_ -dotnet_naming_style.s_camelcase.required_suffix = -dotnet_naming_style.s_camelcase.word_separator = -dotnet_naming_style.s_camelcase.capitalization = camel_case +[*.{appxmanifest,asax,ascx,aspx,axaml,build,c,c++,c++m,cc,ccm,cginc,compute,cp,cpp,cppm,cs,cshtml,cu,cuh,cxx,cxxm,dtd,fs,fsi,fsscript,fsx,fx,fxh,h,hh,hlsl,hlsli,hlslinc,hpp,hxx,inc,inl,ino,ipp,ixx,master,ml,mli,mpp,mq4,mq5,mqh,mxx,nuspec,paml,razor,resw,resx,shader,skin,tpp,usf,ush,uxml,vb,xaml,xamlx,xoml,xsd}] +indent_style = space +indent_size = 4 +tab_width = 4 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 7b84111cc..2b0bda061 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -61,7 +61,6 @@ jobs: - name: Restore dependencies run: dotnet restore CleanArchitecture.Blazor.sln - - name: Build run: dotnet build CleanArchitecture.Blazor.sln --configuration Debug --no-restore diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 56755ce78..869f3f03a 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -31,7 +31,7 @@ jobs: - name: Restore dependencies run: dotnet restore CleanArchitecture.Blazor.sln - name: Build - run: dotnet build CleanArchitecture.Blazor.sln --no-restore --configuration Release + run: dotnet build CleanArchitecture.Blazor.sln --configuration Debug --no-restore # - name: Test # run: dotnet test CleanArchitecture.Blazor.sln --no-build --configuration Release --filter "FullyQualifiedName!~AcceptanceTests" env: diff --git a/CleanArchitecture.Blazor.nuspec b/CleanArchitecture.Blazor.nuspec index 95bad9fa4..50a1cb967 100644 --- a/CleanArchitecture.Blazor.nuspec +++ b/CleanArchitecture.Blazor.nuspec @@ -1,37 +1,39 @@  - - CleanArchitecture.Blazor.Solution.Template - 1.0.0-preview.17 - Clean Architecture Blazor Solution Template - hl.z - Clean Architecture Blazor Solution Template for .NET 8. - - A Clean Architecture Blazor Server Solution Template for creating a Single-Page Application (SPA) with ASP.NET Core. - - - 1.0.0-preview.17 - - 🌈 support.net 8 - + + CleanArchitecture.Blazor.Solution.Template + 1.0.0-preview.17 + Clean Architecture Blazor Solution Template + hl.z + Clean Architecture Blazor Solution Template for .NET 8. + + A Clean Architecture Blazor Server Solution Template for creating a Single-Page Application (SPA) with + ASP.NET Core. + + + 1.0.0-preview.17 + - 🌈 support.net 8 + - https://github.com/neozhu/CleanArchitectureWithBlazorServer - + https://github.com/neozhu/CleanArchitectureWithBlazorServer + - MIT - false - clean-architecture blazor server application project template csharp - icon.png - README.md + MIT + false + clean-architecture blazor server application project template csharp + icon.png + README.md - - - - + + + + - - - - - + + + + + diff --git a/README.md b/README.md index 2dfd22580..65c8ba045 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,8 @@ Blazor technology. ## Docker compose https deployment - Create self-signed development certificates for the project - - cmd: `dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\CleanArchitecture.Blazor.Server.UI.pfx -p Password@123` + - + cmd: `dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\CleanArchitecture.Blazor.Server.UI.pfx -p Password@123` - cmd: `dotnet dev-certs https --trust` - Manage User secrets to save the password - cmd: `dotnet user-secrets init` @@ -52,24 +53,26 @@ Blazor technology.
### Install CleanArchitecture CodeGenerator For Blazor App + - Open Manage Extensions Search with `CleanArchitecture CodeGenerator For Blaozr App` -![image](https://github.com/neozhu/CleanArchitectureWithBlazorServer/assets/1549611/555d274c-8f62-438b-ac7a-6d327e4c23c8) + ![image](https://github.com/neozhu/CleanArchitectureWithBlazorServer/assets/1549611/555d274c-8f62-438b-ac7a-6d327e4c23c8) - Download to Install ### CleanArchitecture CodeGenerator For Blazor App Repo + - https://github.com/neozhu/CleanArchitectureCodeGenerator - The code generator can automatically generate the standard code - Application Layer Code - + - ![image](https://user-images.githubusercontent.com/1549611/181414766-84850a90-3a21-47ed-afcf-1b5cdd602edf.png) - Domain Event - + - ![image](https://user-images.githubusercontent.com/1549611/183537303-058d6f49-fc45-4b77-8924-cc2e8266cad7.png) - Blazor UI Layer Code - + - ![image](https://user-images.githubusercontent.com/1549611/181414818-5c1c2dfc-5560-4ab2-8773-dc7c816730d4.png) - Task List - + - ![image](https://user-images.githubusercontent.com/1549611/183537444-3d1b2980-b131-4e9d-bfe1-7b475f760b57.png) ## How to install solution templates @@ -77,7 +80,7 @@ Blazor technology. - install the project template - run CLI: `dotnet new install ./` - run CLI: `dotnet new list` - + image - create a solution with the template @@ -90,12 +93,10 @@ Blazor technology. - create a new project from Clean Architecture for Blazor Server Solution image - - - ## Why I chose Blazor Server -- I hate switching between C# and JavaScript at the same time in order to develop a project, which is why I opted for Blazor Server. +- I hate switching between C# and JavaScript at the same time in order to develop a project, which is why I opted for + Blazor Server. ## Characteristic diff --git a/docker-compose.dcproj b/docker-compose.dcproj index 591947d0e..0290d0819 100644 --- a/docker-compose.dcproj +++ b/docker-compose.dcproj @@ -1,22 +1,22 @@ - - 2.1 - Linux - 6bd2ec46-fa8f-44f3-af33-903bbb347116 - LaunchBrowser - {Scheme}://localhost:{ServicePort} - dashboard - - - - - - - - - - - - + + 2.1 + Linux + 6bd2ec46-fa8f-44f3-af33-903bbb347116 + LaunchBrowser + {Scheme}://localhost:{ServicePort} + dashboard + + + + + + + + + + + + \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 98026a1a6..65ec4b7ce 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,8 +14,8 @@ services: #- ASPNETCORE_Kestrel__Certificates__Default__Password=Password@123 #- ASPNETCORE_Kestrel__Certificates__Default__Path=/root/.aspnet/https/CleanArchitecture.Blazor.Server.UI.pfx volumes: - - ${APPDATA}\microsoft\UserSecrets\:/root/.microsoft/usersecrets:ro - - ~/.aspnet/https:/root/.aspnet/https:ro + - ${APPDATA}\microsoft\UserSecrets\:/root/.microsoft/usersecrets:ro + - ~/.aspnet/https:/root/.aspnet/https:ro ports: - "5000:80" - "5001:443" diff --git a/src/Application/Application.csproj b/src/Application/Application.csproj index 97ce5c1c6..eba437e53 100644 --- a/src/Application/Application.csproj +++ b/src/Application/Application.csproj @@ -16,8 +16,8 @@ - - + + diff --git a/src/Application/Common/EventHandlers/CreatedEventHandler.cs b/src/Application/Common/EventHandlers/CreatedEventHandler.cs index 543145f68..c45b4ec94 100644 --- a/src/Application/Common/EventHandlers/CreatedEventHandler.cs +++ b/src/Application/Common/EventHandlers/CreatedEventHandler.cs @@ -19,3 +19,4 @@ // return Task.CompletedTask; // } //} + diff --git a/src/Application/Common/EventHandlers/DeletedEventHandler.cs b/src/Application/Common/EventHandlers/DeletedEventHandler.cs index 777a960dc..2cf348dc0 100644 --- a/src/Application/Common/EventHandlers/DeletedEventHandler.cs +++ b/src/Application/Common/EventHandlers/DeletedEventHandler.cs @@ -18,3 +18,4 @@ // return Task.CompletedTask; // } //} + diff --git a/src/Application/Common/EventHandlers/UpdatedEventHandler.cs b/src/Application/Common/EventHandlers/UpdatedEventHandler.cs index 6204f59fe..af6b7d705 100644 --- a/src/Application/Common/EventHandlers/UpdatedEventHandler.cs +++ b/src/Application/Common/EventHandlers/UpdatedEventHandler.cs @@ -18,3 +18,4 @@ // return Task.CompletedTask; // } //} + diff --git a/src/Application/Common/ExceptionHandlers/ConflictException.cs b/src/Application/Common/ExceptionHandlers/ConflictException.cs index 0716d42d3..71477085c 100644 --- a/src/Application/Common/ExceptionHandlers/ConflictException.cs +++ b/src/Application/Common/ExceptionHandlers/ConflictException.cs @@ -1,8 +1,11 @@ +using System.Net; + namespace CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; + public class ConflictException : ServerException { public ConflictException(string message) - : base(message, System.Net.HttpStatusCode.Conflict) + : base(message, HttpStatusCode.Conflict) { } -} +} \ No newline at end of file diff --git a/src/Application/Common/ExceptionHandlers/DbExceptionHandler.cs b/src/Application/Common/ExceptionHandlers/DbExceptionHandler.cs index 2918a73e8..4d02021d6 100644 --- a/src/Application/Common/ExceptionHandlers/DbExceptionHandler.cs +++ b/src/Application/Common/ExceptionHandlers/DbExceptionHandler.cs @@ -29,7 +29,6 @@ private static string[] GetErrors(DbUpdateException exception) && exception.InnerException != null && exception.InnerException is SqlException sqlException ) - { switch (sqlException.Number) { case 2627: // Unique constraint error @@ -52,7 +51,6 @@ private static string[] GetErrors(DbUpdateException exception) errors.Add("A Missing Parameter has led to Error While Creating the record(s)!"); break; } - } return errors.ToArray(); diff --git a/src/Application/Common/ExceptionHandlers/ForbiddenAccessException.cs b/src/Application/Common/ExceptionHandlers/ForbiddenAccessException.cs index a57fed2c7..98eb1e63f 100644 --- a/src/Application/Common/ExceptionHandlers/ForbiddenAccessException.cs +++ b/src/Application/Common/ExceptionHandlers/ForbiddenAccessException.cs @@ -1,9 +1,13 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Net; + namespace CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; public class ForbiddenException : ServerException { - public ForbiddenException(string message) : base(message,System.Net.HttpStatusCode.Forbidden) { } -} + public ForbiddenException(string message) : base(message, HttpStatusCode.Forbidden) + { + } +} \ No newline at end of file diff --git a/src/Application/Common/ExceptionHandlers/InternalServerException.cs b/src/Application/Common/ExceptionHandlers/InternalServerException.cs index c81ea2496..c7fe6669b 100644 --- a/src/Application/Common/ExceptionHandlers/InternalServerException.cs +++ b/src/Application/Common/ExceptionHandlers/InternalServerException.cs @@ -1,8 +1,9 @@ namespace CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; + public class InternalServerException : ServerException { public InternalServerException(string message) - : base(message, System.Net.HttpStatusCode.InternalServerError) + : base(message) { } } \ No newline at end of file diff --git a/src/Application/Common/ExceptionHandlers/NotFoundException.cs b/src/Application/Common/ExceptionHandlers/NotFoundException.cs index ffe1808ff..2c5529f0a 100644 --- a/src/Application/Common/ExceptionHandlers/NotFoundException.cs +++ b/src/Application/Common/ExceptionHandlers/NotFoundException.cs @@ -1,18 +1,19 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Net; + namespace CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; public class NotFoundException : ServerException { - - public NotFoundException(string message) - : base(message,System.Net.HttpStatusCode.NotFound) + : base(message, HttpStatusCode.NotFound) { } - public NotFoundException(string name, object key) - : base($"Entity \"{name}\" ({key}) was not found.", System.Net.HttpStatusCode.NotFound) + + public NotFoundException(string name, object key) + : base($"Entity \"{name}\" ({key}) was not found.", HttpStatusCode.NotFound) { } -} +} \ No newline at end of file diff --git a/src/Application/Common/ExceptionHandlers/ServerException.cs b/src/Application/Common/ExceptionHandlers/ServerException.cs index 5a6aa9771..2de77dfaf 100644 --- a/src/Application/Common/ExceptionHandlers/ServerException.cs +++ b/src/Application/Common/ExceptionHandlers/ServerException.cs @@ -1,16 +1,17 @@ using System.Net; namespace CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; + public class ServerException : Exception { - public IEnumerable ErrorMessages { get; } - - public HttpStatusCode StatusCode { get; } - public ServerException(string message, HttpStatusCode statusCode = HttpStatusCode.InternalServerError) : base(message) { - ErrorMessages = new string[] { message }; + ErrorMessages = new[] { message }; StatusCode = statusCode; } + + public IEnumerable ErrorMessages { get; } + + public HttpStatusCode StatusCode { get; } } \ No newline at end of file diff --git a/src/Application/Common/ExceptionHandlers/ServerExceptionHandler.cs b/src/Application/Common/ExceptionHandlers/ServerExceptionHandler.cs index 7bd1cd996..d10e379a9 100644 --- a/src/Application/Common/ExceptionHandlers/ServerExceptionHandler.cs +++ b/src/Application/Common/ExceptionHandlers/ServerExceptionHandler.cs @@ -1,7 +1,9 @@ namespace CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; -public class ServerExceptionHandler : IRequestExceptionHandler + +public class + ServerExceptionHandler : IRequestExceptionHandler where TRequest : IRequest> - where TResponse: Result + where TResponse : Result where TException : ServerException { private readonly ILogger> _logger; @@ -11,11 +13,10 @@ public ServerExceptionHandler(ILogger state, CancellationToken cancellationToken) + public Task Handle(TRequest request, TException exception, RequestExceptionHandlerState state, + CancellationToken cancellationToken) { - state.SetHandled((TResponse)Result.Failure(new string[] { exception.Message })); + state.SetHandled((TResponse)Result.Failure(exception.Message)); return Task.CompletedTask; } - - -} +} \ No newline at end of file diff --git a/src/Application/Common/ExceptionHandlers/UnauthorizedException.cs b/src/Application/Common/ExceptionHandlers/UnauthorizedException.cs index c6505be82..21419e0bd 100644 --- a/src/Application/Common/ExceptionHandlers/UnauthorizedException.cs +++ b/src/Application/Common/ExceptionHandlers/UnauthorizedException.cs @@ -1,9 +1,11 @@ +using System.Net; + namespace CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; + public class UnauthorizedException : ServerException { public UnauthorizedException(string message) - : base(message, System.Net.HttpStatusCode.Unauthorized) + : base(message, HttpStatusCode.Unauthorized) { } -} - +} \ No newline at end of file diff --git a/src/Application/Common/ExceptionHandlers/ValidationExceptionHandler.cs b/src/Application/Common/ExceptionHandlers/ValidationExceptionHandler.cs index ab4d336ec..15cec28f7 100644 --- a/src/Application/Common/ExceptionHandlers/ValidationExceptionHandler.cs +++ b/src/Application/Common/ExceptionHandlers/ValidationExceptionHandler.cs @@ -1,7 +1,10 @@ namespace CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; -public class ValidationExceptionHandler : IRequestExceptionHandler + +public class + ValidationExceptionHandler : IRequestExceptionHandler where TRequest : IRequest> - where TResponse: Result + where TResponse : Result where TException : ValidationException { private readonly ILogger> _logger; @@ -11,9 +14,11 @@ public ValidationExceptionHandler(ILogger state, CancellationToken cancellationToken) + public Task Handle(TRequest request, TException exception, RequestExceptionHandlerState state, + CancellationToken cancellationToken) { - state.SetHandled((TResponse)Result.Failure(exception.Errors.Select(x => x.ErrorMessage).Distinct().ToArray())); + state.SetHandled( + (TResponse)Result.Failure(exception.Errors.Select(x => x.ErrorMessage).Distinct().ToArray())); return Task.CompletedTask; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Extensions/DataRowExtensions.cs b/src/Application/Common/Extensions/DataRowExtensions.cs index b7aac1624..675b541f3 100644 --- a/src/Application/Common/Extensions/DataRowExtensions.cs +++ b/src/Application/Common/Extensions/DataRowExtensions.cs @@ -7,30 +7,50 @@ public static class DataRowExtensions { public static T? FieldOrDefault(this DataRow row, string columnName) { - return (row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString()) ) ? default(T) : row.Field(columnName); + return row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString()) + ? default + : row.Field(columnName); } + public static decimal? FieldDecimalOrNull(this DataRow row, string columnName) { - return (row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString())) ? default(decimal?) : Convert.ToDecimal(row[columnName]); + return row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString()) + ? default(decimal?) + : Convert.ToDecimal(row[columnName]); } + public static decimal FieldDecimalOrDefault(this DataRow row, string columnName) { - return (row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString())) ? default(decimal) : Convert.ToDecimal(row[columnName]); + return row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString()) + ? default + : Convert.ToDecimal(row[columnName]); } + public static int? FieldIntOrNull(this DataRow row, string columnName) { - return (row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString())) ? default(int?) : Convert.ToInt32(row[columnName]); + return row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString()) + ? default(int?) + : Convert.ToInt32(row[columnName]); } + public static int FieldIntOrDefault(this DataRow row, string columnName) { - return (row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString())) ? default(int) : Convert.ToInt32(row[columnName]); + return row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString()) + ? default + : Convert.ToInt32(row[columnName]); } + public static DateTime? FieldDateTimeOrNull(this DataRow row, string columnName) { - return (row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString())) ? default(DateTime?) : Convert.ToDateTime(row[columnName], System.Globalization.CultureInfo.InvariantCulture); + return row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString()) + ? default(DateTime?) + : Convert.ToDateTime(row[columnName], CultureInfo.InvariantCulture); } + public static DateTime FieldDateTimeOrDefaultNow(this DataRow row, string columnName) { - return (row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString())) ? DateTime.Now : Convert.ToDateTime(row[columnName], System.Globalization.CultureInfo.InvariantCulture); + return row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString()) + ? DateTime.Now + : Convert.ToDateTime(row[columnName], CultureInfo.InvariantCulture); } -} +} \ No newline at end of file diff --git a/src/Application/Common/Extensions/DescriptionAttributeExtensions.cs b/src/Application/Common/Extensions/DescriptionAttributeExtensions.cs index a630b5e73..ed0938de7 100644 --- a/src/Application/Common/Extensions/DescriptionAttributeExtensions.cs +++ b/src/Application/Common/Extensions/DescriptionAttributeExtensions.cs @@ -1,41 +1,36 @@ namespace CleanArchitecture.Blazor.Application.Common.Extensions; + public static class DescriptionAttributeExtensions { public static string GetDescription(this Enum e) { var name = e.ToString(); var memberInfo = e.GetType().GetMember(name)[0]; - var descriptionAttributes = memberInfo.GetCustomAttributes(typeof(DescriptionAttribute), inherit: false); - if (descriptionAttributes.Any()) - { - return ((DescriptionAttribute)descriptionAttributes.First()).Description; - } + var descriptionAttributes = memberInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); + if (descriptionAttributes.Any()) return ((DescriptionAttribute)descriptionAttributes.First()).Description; return name; } - public static string GetMemberDescription(this T t, Expression> property) where T : class + + public static string GetMemberDescription(this T t, Expression> property) + where T : class { if (t is null) t = Activator.CreateInstance(); var memberName = ((MemberExpression)property.Body).Member.Name; var memberInfo = typeof(T).GetMember(memberName).FirstOrDefault(); if (memberInfo != null) { - var descriptionAttributes = memberInfo.GetCustomAttributes(typeof(DescriptionAttribute), inherit: false); - if (descriptionAttributes.Any()) - { - return ((DescriptionAttribute)descriptionAttributes.First()).Description; - } + var descriptionAttributes = memberInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); + if (descriptionAttributes.Any()) return ((DescriptionAttribute)descriptionAttributes.First()).Description; } + return memberName; } + public static string GetClassDescription(this T t) where T : class { if (t is null) t = (T)Activator.CreateInstance(typeof(T))!; - var descriptionAttributes = t.GetType().GetCustomAttributes(typeof(DescriptionAttribute), inherit: false); - if (descriptionAttributes.Any()) - { - return (descriptionAttributes.First() as DescriptionAttribute)!.Description; - } + var descriptionAttributes = t.GetType().GetCustomAttributes(typeof(DescriptionAttribute), false); + if (descriptionAttributes.Any()) return (descriptionAttributes.First() as DescriptionAttribute)!.Description; return nameof(t); - } -} +} \ No newline at end of file diff --git a/src/Application/Common/Extensions/QueryableExtensions.cs b/src/Application/Common/Extensions/QueryableExtensions.cs index 461a0caa9..953baa39a 100644 --- a/src/Application/Common/Extensions/QueryableExtensions.cs +++ b/src/Application/Common/Extensions/QueryableExtensions.cs @@ -9,25 +9,32 @@ namespace CleanArchitecture.Blazor.Application.Common.Extensions; public static class QueryableExtensions { /// - /// Extension method to provided query by specification. + /// Extension method to provided query by specification. /// /// - /// This method uses the SpecificationEvaluator to evaluate and modify the provided query based on the given specification. + /// This method uses the SpecificationEvaluator to evaluate and modify the provided query based on the given + /// specification. /// /// Type of the entities in the query /// The original query to which the specification should be applied /// The specification to apply to the query - /// Optional flag to determine if only the criteria should be evaluated or other configurations as well + /// + /// Optional flag to determine if only the criteria should be evaluated or other + /// configurations as well + /// /// The modified query with the specification applied - public static IQueryable ApplySpecification(this IQueryable query, ISpecification spec, bool evaluateCriteriaOnly=false) where T : class, IEntity + public static IQueryable ApplySpecification(this IQueryable query, ISpecification spec, + bool evaluateCriteriaOnly = false) where T : class, IEntity { return SpecificationEvaluator.Default.GetQuery(query, spec, evaluateCriteriaOnly); } + /// - /// Extension method to provided ordered queryable data to a paginated result set. + /// Extension method to provided ordered queryable data to a paginated result set. /// /// - /// This method will apply the given specification to the query, paginate the results, and project them to the desired result type. + /// This method will apply the given specification to the query, paginate the results, and project them to the desired + /// result type. /// /// Source type of the entities in the query /// Destination type to which the entities should be projected @@ -38,14 +45,16 @@ public static IQueryable ApplySpecification(this IQueryable query, ISpe /// Configuration for the projection /// Optional cancellation token to cancel the operation /// The paginated and projected data - public static async Task> ProjectToPaginatedDataAsync(this IOrderedQueryable query, ISpecification spec,int pageNumber,int pageSize, IConfigurationProvider configuration, CancellationToken cancellationToken = default) where T : class, IEntity + public static async Task> ProjectToPaginatedDataAsync( + this IOrderedQueryable query, ISpecification spec, int pageNumber, int pageSize, + IConfigurationProvider configuration, CancellationToken cancellationToken = default) where T : class, IEntity { - var specificationEvaluator = SpecificationEvaluator.Default; - var count =await specificationEvaluator.GetQuery(query,spec).CountAsync(); - var data = await specificationEvaluator.GetQuery(query.AsNoTracking(), spec).Skip((pageNumber-1)* pageSize).Take(pageSize) + var count = await specificationEvaluator.GetQuery(query, spec).CountAsync(); + var data = await specificationEvaluator.GetQuery(query.AsNoTracking(), spec).Skip((pageNumber - 1) * pageSize) + .Take(pageSize) .ProjectTo(configuration) .ToListAsync(cancellationToken); return new PaginatedData(data, count, pageNumber, pageSize); } -} +} \ No newline at end of file diff --git a/src/Application/Common/Extensions/StringExtensions.cs b/src/Application/Common/Extensions/StringExtensions.cs index dde7c4305..938b327af 100644 --- a/src/Application/Common/Extensions/StringExtensions.cs +++ b/src/Application/Common/Extensions/StringExtensions.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Security.Cryptography; using System.Text; namespace CleanArchitecture.Blazor.Application.Common.Extensions; @@ -9,23 +10,20 @@ public static class StringExtensions { public static string ToMD5(this string input) { - using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create()) + using (var md5 = MD5.Create()) { var encoding = Encoding.ASCII; var data = encoding.GetBytes(input); Span hashBytes = stackalloc byte[16]; - md5.TryComputeHash(data, hashBytes, out int written); + md5.TryComputeHash(data, hashBytes, out var written); if (written != hashBytes.Length) throw new OverflowException(); Span stringBuffer = stackalloc char[32]; - for (int i = 0; i < hashBytes.Length; i++) - { - hashBytes[i].TryFormat(stringBuffer.Slice(2 * i), out _, "x2"); - } + for (var i = 0; i < hashBytes.Length; i++) hashBytes[i].TryFormat(stringBuffer.Slice(2 * i), out _, "x2"); return new string(stringBuffer); } } -} +} \ No newline at end of file diff --git a/src/Application/Common/Extensions/ValidationExtensions.cs b/src/Application/Common/Extensions/ValidationExtensions.cs index 09340114c..15771a9b7 100644 --- a/src/Application/Common/Extensions/ValidationExtensions.cs +++ b/src/Application/Common/Extensions/ValidationExtensions.cs @@ -1,9 +1,12 @@ using FluentValidation.Results; namespace CleanArchitecture.Blazor.Application.Common.Extensions; + public static class ValidationExtensions { - public static async Task> ValidateAsync(this IEnumerable> validators, ValidationContext validationContext, CancellationToken cancellationToken = default) + public static async Task> ValidateAsync( + this IEnumerable> validators, ValidationContext validationContext, + CancellationToken cancellationToken = default) { if (!validators.Any()) return new List(); @@ -23,4 +26,4 @@ public static Dictionary ToDictionary(this List g.Key, g => g.ToArray()) : new Dictionary(); } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Caching/ICacheInvalidatorRequest.cs b/src/Application/Common/Interfaces/Caching/ICacheInvalidatorRequest.cs index d5a23304c..d721fdf2f 100644 --- a/src/Application/Common/Interfaces/Caching/ICacheInvalidatorRequest.cs +++ b/src/Application/Common/Interfaces/Caching/ICacheInvalidatorRequest.cs @@ -5,6 +5,6 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces.Caching; public interface ICacheInvalidatorRequest : IRequest { - string CacheKey { get => String.Empty; } + string CacheKey => string.Empty; CancellationTokenSource? SharedExpiryTokenSource { get; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Caching/ICacheableRequest.cs b/src/Application/Common/Interfaces/Caching/ICacheableRequest.cs index 3e878561b..a307d7530 100644 --- a/src/Application/Common/Interfaces/Caching/ICacheableRequest.cs +++ b/src/Application/Common/Interfaces/Caching/ICacheableRequest.cs @@ -5,6 +5,6 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces.Caching; public interface ICacheableRequest : IRequest { - string CacheKey { get=>String.Empty; } + string CacheKey => string.Empty; MemoryCacheEntryOptions? Options { get; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IApplicationDbContext.cs b/src/Application/Common/Interfaces/IApplicationDbContext.cs index cc5bbc619..b10fb1b6a 100644 --- a/src/Application/Common/Interfaces/IApplicationDbContext.cs +++ b/src/Application/Common/Interfaces/IApplicationDbContext.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Domain.Entities; using Microsoft.EntityFrameworkCore.ChangeTracking; namespace CleanArchitecture.Blazor.Application.Common.Interfaces; @@ -18,4 +17,4 @@ public interface IApplicationDbContext DbSet Customers { get; set; } ChangeTracker ChangeTracker { get; } Task SaveChangesAsync(CancellationToken cancellationToken); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IApplicationHubWrapper.cs b/src/Application/Common/Interfaces/IApplicationHubWrapper.cs index 5d668e444..1fdaa56ce 100644 --- a/src/Application/Common/Interfaces/IApplicationHubWrapper.cs +++ b/src/Application/Common/Interfaces/IApplicationHubWrapper.cs @@ -5,4 +5,4 @@ public interface IApplicationHubWrapper { Task JobStarted(string message); Task JobCompleted(string message); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IApplicationSettings.cs b/src/Application/Common/Interfaces/IApplicationSettings.cs index 5e14f95e4..f40f0a7c4 100644 --- a/src/Application/Common/Interfaces/IApplicationSettings.cs +++ b/src/Application/Common/Interfaces/IApplicationSettings.cs @@ -1,4 +1,5 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces; + public interface IApplicationSettings { /// @@ -16,4 +17,4 @@ public interface IApplicationSettings /// The application name / title /// string AppName { get; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/ICurrentUserService.cs b/src/Application/Common/Interfaces/ICurrentUserService.cs index ee75fa8ff..f265df840 100644 --- a/src/Application/Common/Interfaces/ICurrentUserService.cs +++ b/src/Application/Common/Interfaces/ICurrentUserService.cs @@ -8,6 +8,5 @@ public interface ICurrentUserService string? UserId { get; set; } string? UserName { get; set; } string? TenantId { get; set; } - string? TenantName { get; set;} - -} + string? TenantName { get; set; } +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IDateTime.cs b/src/Application/Common/Interfaces/IDateTime.cs index f34020874..b666421a3 100644 --- a/src/Application/Common/Interfaces/IDateTime.cs +++ b/src/Application/Common/Interfaces/IDateTime.cs @@ -6,4 +6,4 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces; public interface IDateTime { DateTime Now { get; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IDictionaryService.cs b/src/Application/Common/Interfaces/IDictionaryService.cs index ae3c4195e..687317937 100644 --- a/src/Application/Common/Interfaces/IDictionaryService.cs +++ b/src/Application/Common/Interfaces/IDictionaryService.cs @@ -6,4 +6,4 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces; public interface IDictionaryService { Task> Fetch(string typeName); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IDocumentOcrJob.cs b/src/Application/Common/Interfaces/IDocumentOcrJob.cs index 03fc2f106..8f11b31cf 100644 --- a/src/Application/Common/Interfaces/IDocumentOcrJob.cs +++ b/src/Application/Common/Interfaces/IDocumentOcrJob.cs @@ -7,4 +7,4 @@ public interface IDocumentOcrJob { void Do(int id); Task Recognition(int id, CancellationToken cancellationToken); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IExcelService.cs b/src/Application/Common/Interfaces/IExcelService.cs index 4e013167c..200dcf913 100644 --- a/src/Application/Common/Interfaces/IExcelService.cs +++ b/src/Application/Common/Interfaces/IExcelService.cs @@ -6,11 +6,12 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces; public interface IExcelService { Task CreateTemplateAsync(IEnumerable fields, string sheetName = "Sheet1"); + Task ExportAsync(IEnumerable data , Dictionary> mappers -, string sheetName = "Sheet1"); + , string sheetName = "Sheet1"); Task>> ImportAsync(byte[] data , Dictionary> mappers , string sheetName = "Sheet1"); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IMailService.cs b/src/Application/Common/Interfaces/IMailService.cs index ebc270985..02e02ceeb 100644 --- a/src/Application/Common/Interfaces/IMailService.cs +++ b/src/Application/Common/Interfaces/IMailService.cs @@ -9,4 +9,4 @@ public interface IMailService { Task SendAsync(string to, string subject, string body); Task SendAsync(string to, string subject, string template, object model); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IPDFService.cs b/src/Application/Common/Interfaces/IPDFService.cs index 6a88f6594..33ef2af8b 100644 --- a/src/Application/Common/Interfaces/IPDFService.cs +++ b/src/Application/Common/Interfaces/IPDFService.cs @@ -8,5 +8,4 @@ public interface IPDFService Task ExportAsync(IEnumerable data , Dictionary> mappers , string title, bool landscape); - -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IPicklistService.cs b/src/Application/Common/Interfaces/IPicklistService.cs index af1d20187..eab7a5fc5 100644 --- a/src/Application/Common/Interfaces/IPicklistService.cs +++ b/src/Application/Common/Interfaces/IPicklistService.cs @@ -1,11 +1,12 @@ using CleanArchitecture.Blazor.Application.Features.KeyValues.DTOs; namespace CleanArchitecture.Blazor.Application.Common.Interfaces; + public interface IPicklistService { - List DataSource { get; } + List DataSource { get; } event Action? OnChange; Task InitializeAsync(); void Initialize(); Task Refresh(); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IResult.cs b/src/Application/Common/Interfaces/IResult.cs index 413097c8d..5f5c74540 100644 --- a/src/Application/Common/Interfaces/IResult.cs +++ b/src/Application/Common/Interfaces/IResult.cs @@ -9,7 +9,8 @@ public interface IResult bool Succeeded { get; init; } } + public interface IResult : IResult { T? Data { get; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IService.cs b/src/Application/Common/Interfaces/IService.cs index 0bdb58d46..a3ff17305 100644 --- a/src/Application/Common/Interfaces/IService.cs +++ b/src/Application/Common/Interfaces/IService.cs @@ -5,4 +5,4 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces; public interface IService { -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IUploadService.cs b/src/Application/Common/Interfaces/IUploadService.cs index 1c1708658..e42e408d2 100644 --- a/src/Application/Common/Interfaces/IUploadService.cs +++ b/src/Application/Common/Interfaces/IUploadService.cs @@ -6,4 +6,4 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces; public interface IUploadService { Task UploadAsync(UploadRequest request); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IValidationService.cs b/src/Application/Common/Interfaces/IValidationService.cs index ef8b52225..a4110f58e 100644 --- a/src/Application/Common/Interfaces/IValidationService.cs +++ b/src/Application/Common/Interfaces/IValidationService.cs @@ -1,15 +1,22 @@ using FluentValidation.Internal; namespace CleanArchitecture.Blazor.Application.Common.Interfaces; + public interface IValidationService { Func>> ValidateValue(); + // NOTE: providing the model as parameter is not required, // it's just easier to write and nicer to read in the blazor component // instead of the explicit declaration of the model type Func>> ValidateValue(TRequest _); - Task> ValidateAsync(TRequest model, CancellationToken cancellationToken = default); - Task> ValidateAsync(TRequest model, Action> options, CancellationToken cancellationToken = default); - Task> ValidatePropertyAsync(TRequest model, string propertyName, CancellationToken cancellationToken = default); + Task> ValidateAsync(TRequest model, + CancellationToken cancellationToken = default); + + Task> ValidateAsync(TRequest model, + Action> options, CancellationToken cancellationToken = default); + + Task> ValidatePropertyAsync(TRequest model, string propertyName, + CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Identity/DTOs/RefreshTokenRequest.cs b/src/Application/Common/Interfaces/Identity/DTOs/RefreshTokenRequest.cs index c4a9faeae..f75e5a762 100644 --- a/src/Application/Common/Interfaces/Identity/DTOs/RefreshTokenRequest.cs +++ b/src/Application/Common/Interfaces/Identity/DTOs/RefreshTokenRequest.cs @@ -5,11 +5,12 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces.Identity.DTOs; public class RefreshTokenRequest { - public RefreshTokenRequest(string token,string refreshToken) + public RefreshTokenRequest(string token, string refreshToken) { Token = token; RefreshToken = refreshToken; } + public string Token { get; set; } public string RefreshToken { get; set; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Identity/DTOs/TokenRequest.cs b/src/Application/Common/Interfaces/Identity/DTOs/TokenRequest.cs index 397557b3e..e6677dee1 100644 --- a/src/Application/Common/Interfaces/Identity/DTOs/TokenRequest.cs +++ b/src/Application/Common/Interfaces/Identity/DTOs/TokenRequest.cs @@ -8,4 +8,4 @@ public class TokenRequest public string? UserName { get; set; } public string? Password { get; set; } public bool RememberMe { get; set; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Identity/DTOs/TokenResponse.cs b/src/Application/Common/Interfaces/Identity/DTOs/TokenResponse.cs index 40b046c83..f2091d826 100644 --- a/src/Application/Common/Interfaces/Identity/DTOs/TokenResponse.cs +++ b/src/Application/Common/Interfaces/Identity/DTOs/TokenResponse.cs @@ -9,4 +9,4 @@ public class TokenResponse public string? RefreshToken { get; set; } public string? ProfilePictureDataUrl { get; set; } public DateTime? RefreshTokenExpiryTime { get; set; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Identity/IIdentityService.cs b/src/Application/Common/Interfaces/Identity/IIdentityService.cs index 76f066d40..afb0ed233 100644 --- a/src/Application/Common/Interfaces/Identity/IIdentityService.cs +++ b/src/Application/Common/Interfaces/Identity/IIdentityService.cs @@ -16,4 +16,4 @@ public interface IIdentityService : IService Task GetApplicationUserDto(string userId, CancellationToken cancellation = default); string GetUserName(string userId); Task?> GetUsers(string? tenantId, CancellationToken cancellation = default); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Identity/IIdentitySettings.cs b/src/Application/Common/Interfaces/Identity/IIdentitySettings.cs index b4b3c0079..49d07c7f0 100644 --- a/src/Application/Common/Interfaces/Identity/IIdentitySettings.cs +++ b/src/Application/Common/Interfaces/Identity/IIdentitySettings.cs @@ -1,40 +1,41 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces.Identity; + public interface IIdentitySettings { // Password settings. /// - /// Gets or sets a value indicating whether a password should require a digit. + /// Gets or sets a value indicating whether a password should require a digit. /// bool RequireDigit { get; } /// - /// Gets or sets a value indicating what the minimum required length of a password should be. + /// Gets or sets a value indicating what the minimum required length of a password should be. /// int RequiredLength { get; } /// - /// Gets or sets a value indicating what the maximum required length of a password should be. + /// Gets or sets a value indicating what the maximum required length of a password should be. /// int MaxLength { get; } /// - /// Gets or sets a value indicating whether the password should require a non-alphanumeric(not: 0-9, A-Z) character. + /// Gets or sets a value indicating whether the password should require a non-alphanumeric(not: 0-9, A-Z) character. /// bool RequireNonAlphanumeric { get; } /// - /// Gets or sets a value indicating whether a password should require an upper-case character. + /// Gets or sets a value indicating whether a password should require an upper-case character. /// bool RequireUpperCase { get; } /// - /// Gets or sets a value indicating whether a password should require an lower-case character. + /// Gets or sets a value indicating whether a password should require an lower-case character. /// bool RequireLowerCase { get; } // Lockout settings. /// - /// Gets or sets a value indicating what the default lockout TimeSpan should be, measured in minutes. + /// Gets or sets a value indicating what the default lockout TimeSpan should be, measured in minutes. /// int DefaultLockoutTimeSpan { get; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Identity/IUserDataProvider.cs b/src/Application/Common/Interfaces/Identity/IUserDataProvider.cs index 04e7ccf81..1ef0ca7ab 100644 --- a/src/Application/Common/Interfaces/Identity/IUserDataProvider.cs +++ b/src/Application/Common/Interfaces/Identity/IUserDataProvider.cs @@ -1,8 +1,7 @@ - - using CleanArchitecture.Blazor.Application.Features.Identity.DTOs; namespace CleanArchitecture.Blazor.Application.Common.Interfaces.Identity; + public interface IUserDataProvider { List DataSource { get; } @@ -10,4 +9,4 @@ public interface IUserDataProvider Task InitializeAsync(); void Initialize(); Task Refresh(); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Identity/IUsersStateContainer.cs b/src/Application/Common/Interfaces/Identity/IUsersStateContainer.cs index f68bf7806..1a584665a 100644 --- a/src/Application/Common/Interfaces/Identity/IUsersStateContainer.cs +++ b/src/Application/Common/Interfaces/Identity/IUsersStateContainer.cs @@ -1,10 +1,11 @@ using System.Collections.Concurrent; namespace CleanArchitecture.Blazor.Application.Common.Interfaces.Identity; + public interface IUsersStateContainer { ConcurrentDictionary UsersByConnectionId { get; } event Action? OnChange; void AddOrUpdate(string connectionId, string? name); void Remove(string connectionId); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/MultiTenant/ITenantService.cs b/src/Application/Common/Interfaces/MultiTenant/ITenantService.cs index 873e39f35..da0f6a29e 100644 --- a/src/Application/Common/Interfaces/MultiTenant/ITenantService.cs +++ b/src/Application/Common/Interfaces/MultiTenant/ITenantService.cs @@ -1,6 +1,7 @@ using CleanArchitecture.Blazor.Application.Features.Tenants.DTOs; namespace CleanArchitecture.Blazor.Application.Common.Interfaces.MultiTenant; + public interface ITenantService { List DataSource { get; } @@ -8,4 +9,4 @@ public interface ITenantService Task InitializeAsync(); void Initialize(); Task Refresh(); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Serialization/DefaultJsonSerializerOptions.cs b/src/Application/Common/Interfaces/Serialization/DefaultJsonSerializerOptions.cs index 07c2ac520..23fd1697e 100644 --- a/src/Application/Common/Interfaces/Serialization/DefaultJsonSerializerOptions.cs +++ b/src/Application/Common/Interfaces/Serialization/DefaultJsonSerializerOptions.cs @@ -3,13 +3,14 @@ using System.Text.Unicode; namespace CleanArchitecture.Blazor.Application.Common.Interfaces.Serialization; + public class DefaultJsonSerializerOptions { - public static JsonSerializerOptions Options => new() + public static JsonSerializerOptions Options => new() { Encoder = JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.CjkUnifiedIdeographs), PropertyNamingPolicy = JsonNamingPolicy.CamelCase, PropertyNameCaseInsensitive = true, Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase) } }; -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Serialization/ISerializer.cs b/src/Application/Common/Interfaces/Serialization/ISerializer.cs index bf398ec2e..918132cf5 100644 --- a/src/Application/Common/Interfaces/Serialization/ISerializer.cs +++ b/src/Application/Common/Interfaces/Serialization/ISerializer.cs @@ -1,8 +1,9 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces.Serialization; + public interface ISerializer { string Serialize(T value) where T : class; T? Deserialize(string value) where T : class; byte[] SerializeBytes(T value) where T : class; T? DeserializeBytes(byte[] value) where T : class; -} +} \ No newline at end of file diff --git a/src/Application/Common/Mappings/MappingExtensions.cs b/src/Application/Common/Mappings/MappingExtensions.cs index 2c9f2332f..05b7366e9 100644 --- a/src/Application/Common/Mappings/MappingExtensions.cs +++ b/src/Application/Common/Mappings/MappingExtensions.cs @@ -5,11 +5,22 @@ namespace CleanArchitecture.Blazor.Application.Common.Mappings; public static class MappingExtensions { - public static Task> PaginatedListAsync(this IQueryable queryable, ISpecification spec, int pageNumber, int pageSize, CancellationToken cancellationToken = default) where TDestination : class - => PaginatedList.CreateAsync(queryable.AsNoTracking(), pageNumber, pageSize); - - public static Task> PaginatedDataAsync(this IQueryable queryable, int pageNumber, int pageSize) where TDestination : class - => PaginatedData.CreateAsync(queryable.AsNoTracking(), pageNumber, pageSize); - public static Task> ProjectToListAsync(this IQueryable queryable, IConfigurationProvider configuration) where TDestination : class - => queryable.ProjectTo(configuration).AsNoTracking().ToListAsync(); -} + public static Task> PaginatedListAsync( + this IQueryable queryable, ISpecification spec, int pageNumber, int pageSize, + CancellationToken cancellationToken = default) where TDestination : class + { + return PaginatedList.CreateAsync(queryable.AsNoTracking(), pageNumber, pageSize); + } + + public static Task> PaginatedDataAsync( + this IQueryable queryable, int pageNumber, int pageSize) where TDestination : class + { + return PaginatedData.CreateAsync(queryable.AsNoTracking(), pageNumber, pageSize); + } + + public static Task> ProjectToListAsync(this IQueryable queryable, + IConfigurationProvider configuration) where TDestination : class + { + return queryable.ProjectTo(configuration).AsNoTracking().ToListAsync(); + } +} \ No newline at end of file diff --git a/src/Application/Common/Models/MailRequest.cs b/src/Application/Common/Models/MailRequest.cs index 6d817a470..f377aee5d 100644 --- a/src/Application/Common/Models/MailRequest.cs +++ b/src/Application/Common/Models/MailRequest.cs @@ -9,4 +9,4 @@ public class MailRequest public string? Subject { get; set; } public string? Body { get; set; } public string? From { get; set; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Models/PaginatedData.cs b/src/Application/Common/Models/PaginatedData.cs index 1d8b4a7d0..a421af683 100644 --- a/src/Application/Common/Models/PaginatedData.cs +++ b/src/Application/Common/Models/PaginatedData.cs @@ -5,23 +5,25 @@ namespace CleanArchitecture.Blazor.Application.Common.Models; public class PaginatedData { - public int CurrentPage { get; private set; } - public int TotalItems { get; private set; } - public int TotalPages { get; private set; } - public bool HasPreviousPage => CurrentPage > 1; - public bool HasNextPage => CurrentPage < TotalPages; - public IEnumerable Items { get; set; } - public PaginatedData(IEnumerable items, int total,int pageIndex,int pageSize) + public PaginatedData(IEnumerable items, int total, int pageIndex, int pageSize) { Items = items; TotalItems = total; CurrentPage = pageIndex; TotalPages = (int)Math.Ceiling(total / (double)pageSize); } + + public int CurrentPage { get; } + public int TotalItems { get; private set; } + public int TotalPages { get; } + public bool HasPreviousPage => CurrentPage > 1; + public bool HasNextPage => CurrentPage < TotalPages; + public IEnumerable Items { get; set; } + public static async Task> CreateAsync(IQueryable source, int pageIndex, int pageSize) { var count = await source.CountAsync(); var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync(); return new PaginatedData(items, count, pageIndex, pageSize); } -} +} \ No newline at end of file diff --git a/src/Application/Common/Models/PaginatedList.cs b/src/Application/Common/Models/PaginatedList.cs index a34846846..b140fc9ca 100644 --- a/src/Application/Common/Models/PaginatedList.cs +++ b/src/Application/Common/Models/PaginatedList.cs @@ -28,15 +28,19 @@ public static async Task> CreateAsync(IQueryable source, return new PaginatedList(items, count, pageNumber, pageSize); } } + public class PaginatedList : PaginatedList { - public IReadOnlyCollection Items { get; } - public PaginatedList( IReadOnlyCollection items, int count, int pageNumber, - int pageSize) : base(count, pageNumber, pageSize) => Items = items; + int pageSize) : base(count, pageNumber, pageSize) + { + Items = items; + } + + public IReadOnlyCollection Items { get; } public static async Task> CreateAsync(IQueryable source, int pageIndex, int pageSize) @@ -46,4 +50,4 @@ public static async Task> CreateAsync(IQueryable source, int return new PaginatedList(items, count, pageIndex, pageSize); } -} +} \ No newline at end of file diff --git a/src/Application/Common/Models/PaginationFilter.cs b/src/Application/Common/Models/PaginationFilter.cs index cadd36c42..dc498e608 100644 --- a/src/Application/Common/Models/PaginationFilter.cs +++ b/src/Application/Common/Models/PaginationFilter.cs @@ -1,16 +1,20 @@ namespace CleanArchitecture.Blazor.Application.Common.Models; -public partial class PaginationFilter : BaseFilter +public class PaginationFilter : BaseFilter { public int PageNumber { get; set; } = 1; public int PageSize { get; set; } = 15; public string OrderBy { get; set; } = "Id"; public string SortDirection { get; set; } = "Descending"; - public override string ToString() => $"PageNumber:{PageNumber},PageSize:{PageSize},OrderBy:{OrderBy},SortDirection:{SortDirection},Keyword:{Keyword}"; + + public override string ToString() + { + return + $"PageNumber:{PageNumber},PageSize:{PageSize},OrderBy:{OrderBy},SortDirection:{SortDirection},Keyword:{Keyword}"; + } } public class BaseFilter { public string? Keyword { get; set; } -} - +} \ No newline at end of file diff --git a/src/Application/Common/Models/PaginationRequest.cs b/src/Application/Common/Models/PaginationRequest.cs index 5d61e1e72..46447c254 100644 --- a/src/Application/Common/Models/PaginationRequest.cs +++ b/src/Application/Common/Models/PaginationRequest.cs @@ -10,5 +10,9 @@ public abstract class PaginationRequest public int Rows { get; set; } = 15; public string Sort { get; set; } = "Id"; public string Order { get; set; } = "desc"; - public override string ToString() => $"page:{Page},rows:{Rows},sort:{Sort},order:{Order},filterRule:{FilterRules}"; -} + + public override string ToString() + { + return $"page:{Page},rows:{Rows},sort:{Sort},order:{Order},filterRule:{FilterRules}"; + } +} \ No newline at end of file diff --git a/src/Application/Common/Models/Result.cs b/src/Application/Common/Models/Result.cs index c36ef32dd..8914d3027 100644 --- a/src/Application/Common/Models/Result.cs +++ b/src/Application/Common/Models/Result.cs @@ -9,55 +9,61 @@ internal Result() { Errors = new string[] { }; } + internal Result(bool succeeded, IEnumerable errors) { Succeeded = succeeded; Errors = errors.ToArray(); } + public string ErrorMessage => string.Join(", ", Errors ?? new string[] { }); + public bool Succeeded { get; init; } public string[] Errors { get; init; } - public string ErrorMessage => string.Join(", ", Errors ?? new string[] { }); - public static Result Success() { return new Result(true, Array.Empty()); } + public static Task SuccessAsync() { return Task.FromResult(new Result(true, Array.Empty())); } + public static Result Failure(params string[] errors) { return new Result(false, errors); } + public static Task FailureAsync(params string[] errors) { return Task.FromResult(new Result(false, errors)); } } + public class Result : Result, IResult { - public T? Data { get; set; } - public static new Result Failure(params string[] errors) + public new static Result Failure(params string[] errors) { return new Result { Succeeded = false, Errors = errors.ToArray() }; } - public static new async Task> FailureAsync(params string[] errors) + + public new static async Task> FailureAsync(params string[] errors) { return await Task.FromResult(Failure(errors)); } + public static Result Success(T data) { return new Result { Succeeded = true, Data = data }; } + public static async Task> SuccessAsync(T data) { return await Task.FromResult(Success(data)); } -} - +} \ No newline at end of file diff --git a/src/Application/Common/Models/UploadRequest.cs b/src/Application/Common/Models/UploadRequest.cs index 72a879dfd..2891f4327 100644 --- a/src/Application/Common/Models/UploadRequest.cs +++ b/src/Application/Common/Models/UploadRequest.cs @@ -1,13 +1,11 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Domain.Common.Enums; - namespace CleanArchitecture.Blazor.Application.Common.Models; public class UploadRequest { - public UploadRequest(string fileName, UploadType uploadType, byte[] data) + public UploadRequest(string fileName, UploadType uploadType, byte[] data) { FileName = fileName; UploadType = uploadType; @@ -18,4 +16,4 @@ public UploadRequest(string fileName, UploadType uploadType, byte[] data) public string? Extension { get; set; } public UploadType UploadType { get; set; } public byte[] Data { get; set; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Models/UserProfile.cs b/src/Application/Common/Models/UserProfile.cs index c9fdbe35f..51b55557b 100644 --- a/src/Application/Common/Models/UserProfile.cs +++ b/src/Application/Common/Models/UserProfile.cs @@ -7,16 +7,15 @@ public class UserProfile public string? SuperiorId { get; set; } public string? ProfilePictureDataUrl { get; set; } public string? DisplayName { get; set; } - public required string UserName { get; set; } - public required string Email { get; set; } + public required string UserName { get; set; } + public required string Email { get; set; } public string? PhoneNumber { get; set; } public string? DefaultRole { get; set; } public string[]? AssignedRoles { get; set; } - public required string UserId { get; set; }=Guid.NewGuid().ToString(); + public required string UserId { get; set; } = Guid.NewGuid().ToString(); public bool IsActive { get; set; } public string? TenantId { get; set; } public string? TenantName { get; set; } - } public class UserProfileEditValidator : AbstractValidator diff --git a/src/Application/Common/PublishStrategies/ParallelNoWaitPublisher.cs b/src/Application/Common/PublishStrategies/ParallelNoWaitPublisher.cs index 27d73ecf0..ed8286af7 100644 --- a/src/Application/Common/PublishStrategies/ParallelNoWaitPublisher.cs +++ b/src/Application/Common/PublishStrategies/ParallelNoWaitPublisher.cs @@ -1,13 +1,13 @@ namespace CleanArchitecture.Blazor.Application.Common.PublishStrategies; + public class ParallelNoWaitPublisher : INotificationPublisher { - public Task Publish(IEnumerable handlerExecutors, INotification notification, CancellationToken cancellationToken) + public Task Publish(IEnumerable handlerExecutors, INotification notification, + CancellationToken cancellationToken) { foreach (var handler in handlerExecutors) - { Task.Run(() => handler.HandlerCallback(notification, cancellationToken)); - } return Task.CompletedTask; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Security/LoginFormModel.cs b/src/Application/Common/Security/LoginFormModel.cs index f590d6562..637f2a81a 100644 --- a/src/Application/Common/Security/LoginFormModel.cs +++ b/src/Application/Common/Security/LoginFormModel.cs @@ -1,5 +1,3 @@ -using FluentValidation.Results; - namespace CleanArchitecture.Blazor.Application.Common.Security; public class LoginFormModel @@ -24,6 +22,4 @@ public LoginFormModelFluentValidator(IStringLocalizer { - private readonly IStringLocalizer _localizer; private readonly IIdentitySettings _identitySettings; + private readonly IStringLocalizer _localizer; public RegisterFormModelFluentValidator( IStringLocalizer localizer, @@ -22,16 +22,21 @@ public RegisterFormModelFluentValidator( .MaximumLength(255) .EmailAddress(); RuleFor(p => p.Password).NotEmpty().WithMessage(_localizer["CannotBeEmpty"]) - .MinimumLength(_identitySettings!.RequiredLength).WithMessage(string.Format(_localizer["MinLength"], _identitySettings.RequiredLength)) - .MaximumLength(_identitySettings.MaxLength).WithMessage(string.Format(_localizer["MaxLength"], _identitySettings.MaxLength)) - .Matches(_identitySettings.RequireUpperCase ? @"[A-Z]+" : string.Empty).WithMessage(_localizer["MustContainUpperCase"]) - .Matches(_identitySettings.RequireLowerCase ? @"[a-z]+" : string.Empty).WithMessage(_localizer["MustContainLowerCase"]) - .Matches(_identitySettings.RequireDigit ? @"[0-9]+" : string.Empty).WithMessage(_localizer["MustContainDigit"]) - .Matches(_identitySettings.RequireNonAlphanumeric ? @"[\@\!\?\*\.]+" : string.Empty).WithMessage(_localizer["MustContainAlphanumericCharacter"]); + .MinimumLength(_identitySettings!.RequiredLength) + .WithMessage(string.Format(_localizer["MinLength"], _identitySettings.RequiredLength)) + .MaximumLength(_identitySettings.MaxLength) + .WithMessage(string.Format(_localizer["MaxLength"], _identitySettings.MaxLength)) + .Matches(_identitySettings.RequireUpperCase ? @"[A-Z]+" : string.Empty) + .WithMessage(_localizer["MustContainUpperCase"]) + .Matches(_identitySettings.RequireLowerCase ? @"[a-z]+" : string.Empty) + .WithMessage(_localizer["MustContainLowerCase"]) + .Matches(_identitySettings.RequireDigit ? @"[0-9]+" : string.Empty) + .WithMessage(_localizer["MustContainDigit"]) + .Matches(_identitySettings.RequireNonAlphanumeric ? @"[\@\!\?\*\.]+" : string.Empty) + .WithMessage(_localizer["MustContainAlphanumericCharacter"]); RuleFor(x => x.ConfirmPassword) - .Equal(x => x.Password); + .Equal(x => x.Password); RuleFor(x => x.AgreeToTerms) .Equal(true); } -} - +} \ No newline at end of file diff --git a/src/Application/Common/Security/RequestAuthorizeAttribute.cs b/src/Application/Common/Security/RequestAuthorizeAttribute.cs index 2340474ad..ffc07d8fd 100644 --- a/src/Application/Common/Security/RequestAuthorizeAttribute.cs +++ b/src/Application/Common/Security/RequestAuthorizeAttribute.cs @@ -5,23 +5,25 @@ namespace CleanArchitecture.Blazor.Application.Common.Security; #nullable disable /// -/// Specifies the class this attribute is applied to requires authorization. +/// Specifies the class this attribute is applied to requires authorization. /// -[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] +[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] public class RequestAuthorizeAttribute : Attribute { /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// - public RequestAuthorizeAttribute() { } + public RequestAuthorizeAttribute() + { + } /// - /// Gets or sets a comma delimited list of roles that are allowed to access the resource. + /// Gets or sets a comma delimited list of roles that are allowed to access the resource. /// public string Roles { get; set; } = string.Empty; /// - /// Gets or sets the policy name that determines access to the resource. + /// Gets or sets the policy name that determines access to the resource. /// public string Policy { get; set; } = string.Empty; -} +} \ No newline at end of file diff --git a/src/Application/DependencyInjection.cs b/src/Application/DependencyInjection.cs index d63013418..aad1005e8 100644 --- a/src/Application/DependencyInjection.cs +++ b/src/Application/DependencyInjection.cs @@ -31,5 +31,4 @@ public static IServiceCollection AddApplication(this IServiceCollection services return services; } - -} +} \ No newline at end of file diff --git a/src/Application/Features/AuditTrails/DTOs/AuditTrailDto.cs b/src/Application/Features/AuditTrails/DTOs/AuditTrailDto.cs index f64c8345c..605be887b 100644 --- a/src/Application/Features/AuditTrails/DTOs/AuditTrailDto.cs +++ b/src/Application/Features/AuditTrails/DTOs/AuditTrailDto.cs @@ -3,14 +3,13 @@ using CleanArchitecture.Blazor.Application.Common.Interfaces.Serialization; using CleanArchitecture.Blazor.Application.Features.Identity.DTOs; -using CleanArchitecture.Blazor.Domain.Entities; namespace CleanArchitecture.Blazor.Application.Features.AuditTrails.DTOs; [Description("Audit Trails")] public class AuditTrailDto { - [Description("Id")] public int Id { get; set; } + [Description("Id")] public int Id { get; set; } [Description("User Id")] public string? UserId { get; set; } diff --git a/src/Application/Features/AuditTrails/Queries/PaginationQuery/AuditTrailsWithPaginationQuery.cs b/src/Application/Features/AuditTrails/Queries/PaginationQuery/AuditTrailsWithPaginationQuery.cs index dfadbdfbe..4305df792 100644 --- a/src/Application/Features/AuditTrails/Queries/PaginationQuery/AuditTrailsWithPaginationQuery.cs +++ b/src/Application/Features/AuditTrails/Queries/PaginationQuery/AuditTrailsWithPaginationQuery.cs @@ -4,16 +4,16 @@ using CleanArchitecture.Blazor.Application.Features.AuditTrails.Caching; using CleanArchitecture.Blazor.Application.Features.AuditTrails.DTOs; using CleanArchitecture.Blazor.Application.Features.AuditTrails.Specifications; -using CleanArchitecture.Blazor.Domain.Entities; namespace CleanArchitecture.Blazor.Application.Features.AuditTrails.Queries.PaginationQuery; public class AuditTrailsWithPaginationQuery : AuditTrailAdvancedFilter, ICacheableRequest> { - + public AuditTrailAdvancedSpecification Specification => new(this); + public string CacheKey => AuditTrailsCacheKey.GetPaginationCacheKey($"{this}"); public MemoryCacheEntryOptions? Options => AuditTrailsCacheKey.MemoryCacheEntryOptions; - public AuditTrailAdvancedSpecification Specification => new AuditTrailAdvancedSpecification(this); + public override string ToString() { return @@ -42,10 +42,9 @@ public async Task> Handle(AuditTrailsWithPagination CancellationToken cancellationToken) { var data = await _context.AuditTrails.OrderBy($"{request.OrderBy} {request.SortDirection}") - .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, _mapper.ConfigurationProvider, cancellationToken); + .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, + request.PageSize, _mapper.ConfigurationProvider, cancellationToken); return data; } -} - - +} \ No newline at end of file diff --git a/src/Application/Features/AuditTrails/Specifications/AuditTrailAdvancedFilter.cs b/src/Application/Features/AuditTrails/Specifications/AuditTrailAdvancedFilter.cs index 8e906ebb3..09e6516c1 100644 --- a/src/Application/Features/AuditTrails/Specifications/AuditTrailAdvancedFilter.cs +++ b/src/Application/Features/AuditTrails/Specifications/AuditTrailAdvancedFilter.cs @@ -1,17 +1,16 @@ -using CleanArchitecture.Blazor.Domain.Entities; +namespace CleanArchitecture.Blazor.Application.Features.AuditTrails.Specifications; -namespace CleanArchitecture.Blazor.Application.Features.AuditTrails.Specifications; public enum AuditTrailListView { [Description("All")] All, [Description("My Change Histories")] My, [Description("Created Toady")] CreatedToday, - [Description("View of the last 30 days")] - Last30days + [Description("View of the last 30 days")] Last30days } + public class AuditTrailAdvancedFilter : PaginationFilter { public AuditType? AuditType { get; set; } public AuditTrailListView ListView { get; set; } = AuditTrailListView.All; public UserProfile? CurrentUser { get; set; } -} +} \ No newline at end of file diff --git a/src/Application/Features/AuditTrails/Specifications/AuditTrailAdvancedSpecification.cs b/src/Application/Features/AuditTrails/Specifications/AuditTrailAdvancedSpecification.cs index f8427047c..723a2b4e4 100644 --- a/src/Application/Features/AuditTrails/Specifications/AuditTrailAdvancedSpecification.cs +++ b/src/Application/Features/AuditTrails/Specifications/AuditTrailAdvancedSpecification.cs @@ -1,6 +1,4 @@ -using CleanArchitecture.Blazor.Domain.Entities; - -namespace CleanArchitecture.Blazor.Application.Features.AuditTrails.Specifications; +namespace CleanArchitecture.Blazor.Application.Features.AuditTrails.Specifications; #nullable disable warnings public class AuditTrailAdvancedSpecification : Specification { @@ -16,10 +14,10 @@ public AuditTrailAdvancedSpecification(AuditTrailAdvancedFilter filter) CultureInfo.CurrentCulture); Query.Where(p => p.AuditType == filter.AuditType, filter.AuditType is not null) - .Where(p => p.UserId == filter.CurrentUser.UserId, filter.ListView == AuditTrailListView.My && filter.CurrentUser is not null) - .Where(p => p.DateTime.Date == DateTime.Now.Date, filter.ListView == AuditTrailListView.CreatedToday) - .Where(p => p.DateTime >= last30day, filter.ListView == AuditTrailListView.Last30days) - .Where(x => x.TableName.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)); - + .Where(p => p.UserId == filter.CurrentUser.UserId, + filter.ListView == AuditTrailListView.My && filter.CurrentUser is not null) + .Where(p => p.DateTime.Date == DateTime.Now.Date, filter.ListView == AuditTrailListView.CreatedToday) + .Where(p => p.DateTime >= last30day, filter.ListView == AuditTrailListView.Last30days) + .Where(x => x.TableName.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)); } } \ No newline at end of file diff --git a/src/Application/Features/Customers/Caching/CustomerCacheKey.cs b/src/Application/Features/Customers/Caching/CustomerCacheKey.cs index cf6315c7d..8652c14c5 100644 --- a/src/Application/Features/Customers/Caching/CustomerCacheKey.cs +++ b/src/Application/Features/Customers/Caching/CustomerCacheKey.cs @@ -5,31 +5,41 @@ namespace CleanArchitecture.Blazor.Application.Features.Customers.Caching; public static class CustomerCacheKey { - private static readonly TimeSpan refreshInterval = TimeSpan.FromHours(3); public const string GetAllCacheKey = "all-Customers"; - public static string GetPaginationCacheKey(string parameters) { + private static readonly TimeSpan refreshInterval = TimeSpan.FromHours(3); + private static CancellationTokenSource _tokensource; + + static CustomerCacheKey() + { + _tokensource = new CancellationTokenSource(refreshInterval); + } + + public static MemoryCacheEntryOptions MemoryCacheEntryOptions => + new MemoryCacheEntryOptions().AddExpirationToken(new CancellationChangeToken(SharedExpiryTokenSource().Token)); + + public static string GetPaginationCacheKey(string parameters) + { return $"CustomerCacheKey:CustomersWithPaginationQuery,{parameters}"; } - public static string GetByNameCacheKey(string parameters) { + + public static string GetByNameCacheKey(string parameters) + { return $"CustomerCacheKey:GetByNameCacheKey,{parameters}"; } - public static string GetByIdCacheKey(string parameters) { - return $"CustomerCacheKey:GetByIdCacheKey,{parameters}"; - } - static CustomerCacheKey() + + public static string GetByIdCacheKey(string parameters) { - _tokensource = new CancellationTokenSource(refreshInterval); + return $"CustomerCacheKey:GetByIdCacheKey,{parameters}"; } - private static CancellationTokenSource _tokensource; + public static CancellationTokenSource SharedExpiryTokenSource() { - if (_tokensource.IsCancellationRequested) - { - _tokensource = new CancellationTokenSource(refreshInterval); - } + if (_tokensource.IsCancellationRequested) _tokensource = new CancellationTokenSource(refreshInterval); return _tokensource; } - public static void Refresh() => SharedExpiryTokenSource().Cancel(); - public static MemoryCacheEntryOptions MemoryCacheEntryOptions => new MemoryCacheEntryOptions().AddExpirationToken(new CancellationChangeToken(SharedExpiryTokenSource().Token)); -} + public static void Refresh() + { + SharedExpiryTokenSource().Cancel(); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/AddEdit/AddEditCustomerCommand.cs b/src/Application/Features/Customers/Commands/AddEdit/AddEditCustomerCommand.cs index b649270aa..5da21b515 100644 --- a/src/Application/Features/Customers/Commands/AddEdit/AddEditCustomerCommand.cs +++ b/src/Application/Features/Customers/Commands/AddEdit/AddEditCustomerCommand.cs @@ -1,70 +1,70 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; using CleanArchitecture.Blazor.Application.Features.Customers.Caching; +using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; + namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.AddEdit; -public class AddEditCustomerCommand: ICacheInvalidatorRequest> +public class AddEditCustomerCommand : ICacheInvalidatorRequest> { - [Description("Id")] - public int Id { get; set; } - [Description("Name")] - public string Name {get;set;} = String.Empty; - [Description("Description")] - public string? Description {get;set;} + [Description("Id")] public int Id { get; set; } + [Description("Name")] public string Name { get; set; } = string.Empty; - public string CacheKey => CustomerCacheKey.GetAllCacheKey; - public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); + [Description("Description")] public string? Description { get; set; } + + + public string CacheKey => CustomerCacheKey.GetAllCacheKey; + public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); private class Mapping : Profile { public Mapping() { - CreateMap(MemberList.None); - CreateMap(MemberList.None); - + CreateMap(MemberList.None); + CreateMap(MemberList.None); } } } - public class AddEditCustomerCommandHandler : IRequestHandler> +public class AddEditCustomerCommandHandler : IRequestHandler> +{ + private readonly IApplicationDbContext _context; + private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; + + public AddEditCustomerCommandHandler( + IApplicationDbContext context, + IStringLocalizer localizer, + IMapper mapper + ) { - private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; - private readonly IStringLocalizer _localizer; - public AddEditCustomerCommandHandler( - IApplicationDbContext context, - IStringLocalizer localizer, - IMapper mapper - ) + _context = context; + _localizer = localizer; + _mapper = mapper; + } + + public async Task> Handle(AddEditCustomerCommand request, CancellationToken cancellationToken) + { + if (request.Id > 0) { - _context = context; - _localizer = localizer; - _mapper = mapper; + var item = await _context.Customers.FindAsync(new object[] { request.Id }, cancellationToken) ?? + throw new NotFoundException($"Customer with id: [{request.Id}] not found."); + item = _mapper.Map(request, item); + // raise a update domain event + item.AddDomainEvent(new CustomerUpdatedEvent(item)); + await _context.SaveChangesAsync(cancellationToken); + return await Result.SuccessAsync(item.Id); } - public async Task> Handle(AddEditCustomerCommand request, CancellationToken cancellationToken) + else { - if (request.Id > 0) - { - var item = await _context.Customers.FindAsync(new object[] { request.Id }, cancellationToken) ?? throw new NotFoundException($"Customer with id: [{request.Id}] not found."); - item = _mapper.Map(request, item); - // raise a update domain event - item.AddDomainEvent(new CustomerUpdatedEvent(item)); - await _context.SaveChangesAsync(cancellationToken); - return await Result.SuccessAsync(item.Id); - } - else - { - var item = _mapper.Map(request); - // raise a create domain event - item.AddDomainEvent(new CustomerCreatedEvent(item)); - _context.Customers.Add(item); - await _context.SaveChangesAsync(cancellationToken); - return await Result.SuccessAsync(item.Id); - } - + var item = _mapper.Map(request); + // raise a create domain event + item.AddDomainEvent(new CustomerCreatedEvent(item)); + _context.Customers.Add(item); + await _context.SaveChangesAsync(cancellationToken); + return await Result.SuccessAsync(item.Id); } } - +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/AddEdit/AddEditCustomerCommandValidator.cs b/src/Application/Features/Customers/Commands/AddEdit/AddEditCustomerCommandValidator.cs index 24bc7cab8..06d3287c1 100644 --- a/src/Application/Features/Customers/Commands/AddEdit/AddEditCustomerCommandValidator.cs +++ b/src/Application/Features/Customers/Commands/AddEdit/AddEditCustomerCommandValidator.cs @@ -7,11 +7,8 @@ public class AddEditCustomerCommandValidator : AbstractValidator v.Name) - .MaximumLength(256) - .NotEmpty(); - - } - -} - + RuleFor(v => v.Name) + .MaximumLength(256) + .NotEmpty(); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/Create/CreateCustomerCommand.cs b/src/Application/Features/Customers/Commands/Create/CreateCustomerCommand.cs index 7022200e2..9ec75b071 100644 --- a/src/Application/Features/Customers/Commands/Create/CreateCustomerCommand.cs +++ b/src/Application/Features/Customers/Commands/Create/CreateCustomerCommand.cs @@ -1,55 +1,56 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using System.ComponentModel; -using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; + using CleanArchitecture.Blazor.Application.Features.Customers.Caching; +using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.Create; -public class CreateCustomerCommand: ICacheInvalidatorRequest> +public class CreateCustomerCommand : ICacheInvalidatorRequest> { - [Description("Id")] - public int Id { get; set; } - [Description("Name")] - public string Name {get;set;} = String.Empty; - [Description("Description")] - public string? Description {get;set;} - - public string CacheKey => CustomerCacheKey.GetAllCacheKey; - public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); + [Description("Id")] public int Id { get; set; } + + [Description("Name")] public string Name { get; set; } = string.Empty; + + [Description("Description")] public string? Description { get; set; } + + public string CacheKey => CustomerCacheKey.GetAllCacheKey; + public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); + private class Mapping : Profile { public Mapping() { - CreateMap(MemberList.None); - CreateMap(MemberList.None); + CreateMap(MemberList.None); + CreateMap(MemberList.None); } } } - - public class CreateCustomerCommandHandler : IRequestHandler> + +public class CreateCustomerCommandHandler : IRequestHandler> +{ + private readonly IApplicationDbContext _context; + private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; + + public CreateCustomerCommandHandler( + IApplicationDbContext context, + IStringLocalizer localizer, + IMapper mapper + ) { - private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; - private readonly IStringLocalizer _localizer; - public CreateCustomerCommandHandler( - IApplicationDbContext context, - IStringLocalizer localizer, - IMapper mapper - ) - { - _context = context; - _localizer = localizer; - _mapper = mapper; - } - public async Task> Handle(CreateCustomerCommand request, CancellationToken cancellationToken) - { - var item = _mapper.Map(request); - // raise a create domain event - item.AddDomainEvent(new CustomerCreatedEvent(item)); - _context.Customers.Add(item); - await _context.SaveChangesAsync(cancellationToken); - return await Result.SuccessAsync(item.Id); - } + _context = context; + _localizer = localizer; + _mapper = mapper; } + public async Task> Handle(CreateCustomerCommand request, CancellationToken cancellationToken) + { + var item = _mapper.Map(request); + // raise a create domain event + item.AddDomainEvent(new CustomerCreatedEvent(item)); + _context.Customers.Add(item); + await _context.SaveChangesAsync(cancellationToken); + return await Result.SuccessAsync(item.Id); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/Create/CreateCustomerCommandValidator.cs b/src/Application/Features/Customers/Commands/Create/CreateCustomerCommandValidator.cs index 07b663c29..75aadf0ae 100644 --- a/src/Application/Features/Customers/Commands/Create/CreateCustomerCommandValidator.cs +++ b/src/Application/Features/Customers/Commands/Create/CreateCustomerCommandValidator.cs @@ -5,14 +5,10 @@ namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.Creat public class CreateCustomerCommandValidator : AbstractValidator { - public CreateCustomerCommandValidator() - { - - RuleFor(v => v.Name) - .MaximumLength(256) - .NotEmpty(); - - } - -} - + public CreateCustomerCommandValidator() + { + RuleFor(v => v.Name) + .MaximumLength(256) + .NotEmpty(); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/Delete/DeleteCustomerCommand.cs b/src/Application/Features/Customers/Commands/Delete/DeleteCustomerCommand.cs index 0b47278bd..cc5c731e8 100644 --- a/src/Application/Features/Customers/Commands/Delete/DeleteCustomerCommand.cs +++ b/src/Application/Features/Customers/Commands/Delete/DeleteCustomerCommand.cs @@ -3,49 +3,50 @@ using CleanArchitecture.Blazor.Application.Features.Customers.Caching; - namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.Delete; - public class DeleteCustomerCommand: ICacheInvalidatorRequest> +public class DeleteCustomerCommand : ICacheInvalidatorRequest> +{ + public DeleteCustomerCommand(int[] id) { - public int[] Id { get; } - public string CacheKey => CustomerCacheKey.GetAllCacheKey; - public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); - public DeleteCustomerCommand(int[] id) - { Id = id; - } } - public class DeleteCustomerCommandHandler : - IRequestHandler> + public int[] Id { get; } + public string CacheKey => CustomerCacheKey.GetAllCacheKey; + public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); +} + +public class DeleteCustomerCommandHandler : + IRequestHandler> + +{ + private readonly IApplicationDbContext _context; + private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; + public DeleteCustomerCommandHandler( + IApplicationDbContext context, + IStringLocalizer localizer, + IMapper mapper + ) { - private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; - private readonly IStringLocalizer _localizer; - public DeleteCustomerCommandHandler( - IApplicationDbContext context, - IStringLocalizer localizer, - IMapper mapper - ) - { - _context = context; - _localizer = localizer; - _mapper = mapper; - } - public async Task> Handle(DeleteCustomerCommand request, CancellationToken cancellationToken) + _context = context; + _localizer = localizer; + _mapper = mapper; + } + + public async Task> Handle(DeleteCustomerCommand request, CancellationToken cancellationToken) + { + var items = await _context.Customers.Where(x => request.Id.Contains(x.Id)).ToListAsync(cancellationToken); + foreach (var item in items) { - var items = await _context.Customers.Where(x=>request.Id.Contains(x.Id)).ToListAsync(cancellationToken); - foreach (var item in items) - { - // raise a delete domain event - item.AddDomainEvent(new CustomerDeletedEvent(item)); - _context.Customers.Remove(item); - } - var result = await _context.SaveChangesAsync(cancellationToken); - return await Result.SuccessAsync(result); + // raise a delete domain event + item.AddDomainEvent(new CustomerDeletedEvent(item)); + _context.Customers.Remove(item); } + var result = await _context.SaveChangesAsync(cancellationToken); + return await Result.SuccessAsync(result); } - +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/Delete/DeleteCustomerCommandValidator.cs b/src/Application/Features/Customers/Commands/Delete/DeleteCustomerCommandValidator.cs index 32f8fafba..93241aac1 100644 --- a/src/Application/Features/Customers/Commands/Delete/DeleteCustomerCommandValidator.cs +++ b/src/Application/Features/Customers/Commands/Delete/DeleteCustomerCommandValidator.cs @@ -5,12 +5,8 @@ namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.Delet public class DeleteCustomerCommandValidator : AbstractValidator { - public DeleteCustomerCommandValidator() - { - - RuleFor(v => v.Id).NotNull().ForEach(v=>v.GreaterThan(0)); - - } -} - - + public DeleteCustomerCommandValidator() + { + RuleFor(v => v.Id).NotNull().ForEach(v => v.GreaterThan(0)); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/Import/ImportCustomersCommand.cs b/src/Application/Features/Customers/Commands/Import/ImportCustomersCommand.cs index 8fbb86d39..42395de1e 100644 --- a/src/Application/Features/Customers/Commands/Import/ImportCustomersCommand.cs +++ b/src/Application/Features/Customers/Commands/Import/ImportCustomersCommand.cs @@ -1,92 +1,99 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; using CleanArchitecture.Blazor.Application.Features.Customers.Caching; +using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.Import; - public class ImportCustomersCommand: ICacheInvalidatorRequest> - { - public string FileName { get; set; } - public byte[] Data { get; set; } - public string CacheKey => CustomerCacheKey.GetAllCacheKey; - public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); - public ImportCustomersCommand(string fileName,byte[] data) - { - FileName = fileName; - Data = data; - } - } - public record class CreateCustomersTemplateCommand : IRequest> +public class ImportCustomersCommand : ICacheInvalidatorRequest> +{ + public ImportCustomersCommand(string fileName, byte[] data) { - + FileName = fileName; + Data = data; } - public class ImportCustomersCommandHandler : - IRequestHandler>, - IRequestHandler> - { - private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; - private readonly IStringLocalizer _localizer; - private readonly IExcelService _excelService; - private readonly CustomerDto _dto = new(); + public string FileName { get; set; } + public byte[] Data { get; set; } + public string CacheKey => CustomerCacheKey.GetAllCacheKey; + public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); +} - public ImportCustomersCommandHandler( - IApplicationDbContext context, - IExcelService excelService, - IStringLocalizer localizer, - IMapper mapper - ) - { - _context = context; - _localizer = localizer; - _excelService = excelService; - _mapper = mapper; - } - #nullable disable warnings - public async Task> Handle(ImportCustomersCommand request, CancellationToken cancellationToken) - { +public record class CreateCustomersTemplateCommand : IRequest> +{ +} - var result = await _excelService.ImportAsync(request.Data, mappers: new Dictionary> - { - { _localizer[_dto.GetMemberDescription(x=>x.Name)], (row, item) => item.Name = row[_localizer[_dto.GetMemberDescription(x=>x.Name)]].ToString() }, -{ _localizer[_dto.GetMemberDescription(x=>x.Description)], (row, item) => item.Description = row[_localizer[_dto.GetMemberDescription(x=>x.Description)]].ToString() }, +public class ImportCustomersCommandHandler : + IRequestHandler>, + IRequestHandler> +{ + private readonly IApplicationDbContext _context; + private readonly CustomerDto _dto = new(); + private readonly IExcelService _excelService; + private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; - }, _localizer[_dto.GetClassDescription()]); - if (result.Succeeded && result.Data is not null) + public ImportCustomersCommandHandler( + IApplicationDbContext context, + IExcelService excelService, + IStringLocalizer localizer, + IMapper mapper + ) + { + _context = context; + _localizer = localizer; + _excelService = excelService; + _mapper = mapper; + } +#nullable disable warnings + public async Task> Handle(ImportCustomersCommand request, CancellationToken cancellationToken) + { + var result = await _excelService.ImportAsync(request.Data, + new Dictionary> { - foreach (var dto in result.Data) { - var exists = await _context.Customers.AnyAsync(x => x.Name == dto.Name, cancellationToken); - if (!exists) - { - var item = _mapper.Map(dto); - // add create domain events if this entity implement the IHasDomainEvent interface - // item.AddDomainEvent(new CustomerCreatedEvent(item)); - await _context.Customers.AddAsync(item, cancellationToken); - } - } - await _context.SaveChangesAsync(cancellationToken); - return await Result.SuccessAsync(result.Data.Count()); - } - else - { - return await Result.FailureAsync(result.Errors); - } - } - public async Task> Handle(CreateCustomersTemplateCommand request, CancellationToken cancellationToken) + _localizer[_dto.GetMemberDescription(x => x.Name)], + (row, item) => item.Name = row[_localizer[_dto.GetMemberDescription(x => x.Name)]].ToString() + }, + { + _localizer[_dto.GetMemberDescription(x => x.Description)], + (row, item) => + item.Description = row[_localizer[_dto.GetMemberDescription(x => x.Description)]].ToString() + } + }, _localizer[_dto.GetClassDescription()]); + if (result.Succeeded && result.Data is not null) { - // TODO: Implement ImportCustomersCommandHandler method - var fields = new string[] { - // TODO: Define the fields that should be generate in the template, for example: - _localizer[_dto.GetMemberDescription(x=>x.Name)], -_localizer[_dto.GetMemberDescription(x=>x.Description)], + foreach (var dto in result.Data) + { + var exists = await _context.Customers.AnyAsync(x => x.Name == dto.Name, cancellationToken); + if (!exists) + { + var item = _mapper.Map(dto); + // add create domain events if this entity implement the IHasDomainEvent interface + // item.AddDomainEvent(new CustomerCreatedEvent(item)); + await _context.Customers.AddAsync(item, cancellationToken); + } + } - }; - var result = await _excelService.CreateTemplateAsync(fields, _localizer[_dto.GetClassDescription()]); - return await Result.SuccessAsync(result); + await _context.SaveChangesAsync(cancellationToken); + return await Result.SuccessAsync(result.Data.Count()); } + + return await Result.FailureAsync(result.Errors); } + public async Task> Handle(CreateCustomersTemplateCommand request, + CancellationToken cancellationToken) + { + // TODO: Implement ImportCustomersCommandHandler method + var fields = new string[] + { + // TODO: Define the fields that should be generate in the template, for example: + _localizer[_dto.GetMemberDescription(x => x.Name)], + _localizer[_dto.GetMemberDescription(x => x.Description)] + }; + var result = await _excelService.CreateTemplateAsync(fields, _localizer[_dto.GetClassDescription()]); + return await Result.SuccessAsync(result); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/Import/ImportCustomersCommandValidator.cs b/src/Application/Features/Customers/Commands/Import/ImportCustomersCommandValidator.cs index 1791c5109..6744f8f57 100644 --- a/src/Application/Features/Customers/Commands/Import/ImportCustomersCommandValidator.cs +++ b/src/Application/Features/Customers/Commands/Import/ImportCustomersCommandValidator.cs @@ -5,13 +5,10 @@ namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.Impor public class ImportCustomersCommandValidator : AbstractValidator { - public ImportCustomersCommandValidator() - { - - RuleFor(v => v.Data) - .NotNull() - .NotEmpty(); - - } -} - + public ImportCustomersCommandValidator() + { + RuleFor(v => v.Data) + .NotNull() + .NotEmpty(); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/Update/UpdateCustomerCommand.cs b/src/Application/Features/Customers/Commands/Update/UpdateCustomerCommand.cs index 10f6d1468..f1290510c 100644 --- a/src/Application/Features/Customers/Commands/Update/UpdateCustomerCommand.cs +++ b/src/Application/Features/Customers/Commands/Update/UpdateCustomerCommand.cs @@ -1,56 +1,57 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using System.ComponentModel; -using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; + using CleanArchitecture.Blazor.Application.Features.Customers.Caching; +using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.Update; -public class UpdateCustomerCommand: ICacheInvalidatorRequest> +public class UpdateCustomerCommand : ICacheInvalidatorRequest> { - [Description("Id")] - public int Id { get; set; } - [Description("Name")] - public string Name {get;set;} = String.Empty; - [Description("Description")] - public string? Description {get;set;} - - public string CacheKey => CustomerCacheKey.GetAllCacheKey; - public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); + [Description("Id")] public int Id { get; set; } + + [Description("Name")] public string Name { get; set; } = string.Empty; + + [Description("Description")] public string? Description { get; set; } + + public string CacheKey => CustomerCacheKey.GetAllCacheKey; + public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); + private class Mapping : Profile { public Mapping() { - CreateMap(MemberList.None); - CreateMap(MemberList.None); + CreateMap(MemberList.None); + CreateMap(MemberList.None); } } } - public class UpdateCustomerCommandHandler : IRequestHandler> - { - private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; - private readonly IStringLocalizer _localizer; - public UpdateCustomerCommandHandler( - IApplicationDbContext context, - IStringLocalizer localizer, - IMapper mapper - ) - { - _context = context; - _localizer = localizer; - _mapper = mapper; - } - public async Task> Handle(UpdateCustomerCommand request, CancellationToken cancellationToken) - { +public class UpdateCustomerCommandHandler : IRequestHandler> +{ + private readonly IApplicationDbContext _context; + private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; - var item =await _context.Customers.FindAsync( new object[] { request.Id }, cancellationToken)?? throw new NotFoundException($"Customer with id: [{request.Id}] not found."); - item = _mapper.Map(request, item); - // raise a update domain event - item.AddDomainEvent(new CustomerUpdatedEvent(item)); - await _context.SaveChangesAsync(cancellationToken); - return await Result.SuccessAsync(item.Id); - } + public UpdateCustomerCommandHandler( + IApplicationDbContext context, + IStringLocalizer localizer, + IMapper mapper + ) + { + _context = context; + _localizer = localizer; + _mapper = mapper; } + public async Task> Handle(UpdateCustomerCommand request, CancellationToken cancellationToken) + { + var item = await _context.Customers.FindAsync(new object[] { request.Id }, cancellationToken) ?? + throw new NotFoundException($"Customer with id: [{request.Id}] not found."); + item = _mapper.Map(request, item); + // raise a update domain event + item.AddDomainEvent(new CustomerUpdatedEvent(item)); + await _context.SaveChangesAsync(cancellationToken); + return await Result.SuccessAsync(item.Id); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/Update/UpdateCustomerCommandValidator.cs b/src/Application/Features/Customers/Commands/Update/UpdateCustomerCommandValidator.cs index 35f4d6949..a6335bfdf 100644 --- a/src/Application/Features/Customers/Commands/Update/UpdateCustomerCommandValidator.cs +++ b/src/Application/Features/Customers/Commands/Update/UpdateCustomerCommandValidator.cs @@ -5,12 +5,9 @@ namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.Updat public class UpdateCustomerCommandValidator : AbstractValidator { - public UpdateCustomerCommandValidator() - { - RuleFor(v => v.Id).NotNull(); - RuleFor(v => v.Name).MaximumLength(256).NotEmpty(); - - } - -} - + public UpdateCustomerCommandValidator() + { + RuleFor(v => v.Id).NotNull(); + RuleFor(v => v.Name).MaximumLength(256).NotEmpty(); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/DTOs/CustomerDto.cs b/src/Application/Features/Customers/DTOs/CustomerDto.cs index d95caf1a7..25e085945 100644 --- a/src/Application/Features/Customers/DTOs/CustomerDto.cs +++ b/src/Application/Features/Customers/DTOs/CustomerDto.cs @@ -1,18 +1,16 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using System.ComponentModel; namespace CleanArchitecture.Blazor.Application.Features.Customers.DTOs; [Description("Customers")] public class CustomerDto { - [Description("Id")] - public int Id { get; set; } - [Description("Name")] - public string Name {get;set;} = String.Empty; - [Description("Description")] - public string? Description {get;set;} + [Description("Id")] public int Id { get; set; } + + [Description("Name")] public string Name { get; set; } = string.Empty; + + [Description("Description")] public string? Description { get; set; } private class Mapping : Profile @@ -22,5 +20,4 @@ public Mapping() CreateMap().ReverseMap(); } } -} - +} \ No newline at end of file diff --git a/src/Application/Features/Customers/EventHandlers/CustomerCreatedEventHandler.cs b/src/Application/Features/Customers/EventHandlers/CustomerCreatedEventHandler.cs index 6266dc629..5e33e672a 100644 --- a/src/Application/Features/Customers/EventHandlers/CustomerCreatedEventHandler.cs +++ b/src/Application/Features/Customers/EventHandlers/CustomerCreatedEventHandler.cs @@ -5,17 +5,18 @@ namespace CleanArchitecture.Blazor.Application.Features.Customers.EventHandlers; public class CustomerCreatedEventHandler : INotificationHandler { - private readonly ILogger _logger; + private readonly ILogger _logger; - public CustomerCreatedEventHandler( - ILogger logger - ) - { - _logger = logger; - } - public Task Handle(CustomerCreatedEvent notification, CancellationToken cancellationToken) - { - _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().FullName); - return Task.CompletedTask; - } -} + public CustomerCreatedEventHandler( + ILogger logger + ) + { + _logger = logger; + } + + public Task Handle(CustomerCreatedEvent notification, CancellationToken cancellationToken) + { + _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().FullName); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/EventHandlers/CustomerDeletedEventHandler.cs b/src/Application/Features/Customers/EventHandlers/CustomerDeletedEventHandler.cs index 94d2bda2d..f910bbd44 100644 --- a/src/Application/Features/Customers/EventHandlers/CustomerDeletedEventHandler.cs +++ b/src/Application/Features/Customers/EventHandlers/CustomerDeletedEventHandler.cs @@ -3,19 +3,20 @@ namespace CleanArchitecture.Blazor.Application.Features.Customers.EventHandlers; - public class CustomerDeletedEventHandler : INotificationHandler +public class CustomerDeletedEventHandler : INotificationHandler +{ + private readonly ILogger _logger; + + public CustomerDeletedEventHandler( + ILogger logger + ) { - private readonly ILogger _logger; + _logger = logger; + } - public CustomerDeletedEventHandler( - ILogger logger - ) - { - _logger = logger; - } - public Task Handle(CustomerDeletedEvent notification, CancellationToken cancellationToken) - { - _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().FullName); - return Task.CompletedTask; - } + public Task Handle(CustomerDeletedEvent notification, CancellationToken cancellationToken) + { + _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().FullName); + return Task.CompletedTask; } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/EventHandlers/CustomerUpdatedEventHandler.cs b/src/Application/Features/Customers/EventHandlers/CustomerUpdatedEventHandler.cs index 569cdd1fa..e30c99136 100644 --- a/src/Application/Features/Customers/EventHandlers/CustomerUpdatedEventHandler.cs +++ b/src/Application/Features/Customers/EventHandlers/CustomerUpdatedEventHandler.cs @@ -3,19 +3,20 @@ namespace CleanArchitecture.Blazor.Application.Features.Customers.EventHandlers; - public class CustomerUpdatedEventHandler : INotificationHandler +public class CustomerUpdatedEventHandler : INotificationHandler +{ + private readonly ILogger _logger; + + public CustomerUpdatedEventHandler( + ILogger logger + ) { - private readonly ILogger _logger; + _logger = logger; + } - public CustomerUpdatedEventHandler( - ILogger logger - ) - { - _logger = logger; - } - public Task Handle(CustomerUpdatedEvent notification, CancellationToken cancellationToken) - { - _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().FullName); - return Task.CompletedTask; - } + public Task Handle(CustomerUpdatedEvent notification, CancellationToken cancellationToken) + { + _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().FullName); + return Task.CompletedTask; } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Queries/Export/ExportCustomersQuery.cs b/src/Application/Features/Customers/Queries/Export/ExportCustomersQuery.cs index dc724a3ce..de7b3659c 100644 --- a/src/Application/Features/Customers/Queries/Export/ExportCustomersQuery.cs +++ b/src/Application/Features/Customers/Queries/Export/ExportCustomersQuery.cs @@ -3,52 +3,50 @@ using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; using CleanArchitecture.Blazor.Application.Features.Customers.Specifications; -using CleanArchitecture.Blazor.Application.Features.Customers.Queries.Pagination; namespace CleanArchitecture.Blazor.Application.Features.Customers.Queries.Export; public class ExportCustomersQuery : CustomerAdvancedFilter, IRequest> { - public CustomerAdvancedSpecification Specification => new CustomerAdvancedSpecification(this); + public CustomerAdvancedSpecification Specification => new(this); } - + public class ExportCustomersQueryHandler : - IRequestHandler> + IRequestHandler> { - private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; - private readonly IExcelService _excelService; - private readonly IStringLocalizer _localizer; - private readonly CustomerDto _dto = new(); - public ExportCustomersQueryHandler( - IApplicationDbContext context, - IMapper mapper, - IExcelService excelService, - IStringLocalizer localizer - ) - { - _context = context; - _mapper = mapper; - _excelService = excelService; - _localizer = localizer; - } - #nullable disable warnings - public async Task> Handle(ExportCustomersQuery request, CancellationToken cancellationToken) - { - var data = await _context.Customers.ApplySpecification(request.Specification) - .OrderBy($"{request.OrderBy} {request.SortDirection}") - .ProjectTo(_mapper.ConfigurationProvider) - .AsNoTracking() - .ToListAsync(cancellationToken); - var result = await _excelService.ExportAsync(data, - new Dictionary>() - { - // TODO: Define the fields that should be exported, for example: - {_localizer[_dto.GetMemberDescription(x=>x.Name)],item => item.Name}, -{_localizer[_dto.GetMemberDescription(x=>x.Description)],item => item.Description}, - - } - , _localizer[_dto.GetClassDescription()]); - return await Result.SuccessAsync(result); - } -} + private readonly IApplicationDbContext _context; + private readonly CustomerDto _dto = new(); + private readonly IExcelService _excelService; + private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; + public ExportCustomersQueryHandler( + IApplicationDbContext context, + IMapper mapper, + IExcelService excelService, + IStringLocalizer localizer + ) + { + _context = context; + _mapper = mapper; + _excelService = excelService; + _localizer = localizer; + } +#nullable disable warnings + public async Task> Handle(ExportCustomersQuery request, CancellationToken cancellationToken) + { + var data = await _context.Customers.ApplySpecification(request.Specification) + .OrderBy($"{request.OrderBy} {request.SortDirection}") + .ProjectTo(_mapper.ConfigurationProvider) + .AsNoTracking() + .ToListAsync(cancellationToken); + var result = await _excelService.ExportAsync(data, + new Dictionary> + { + // TODO: Define the fields that should be exported, for example: + { _localizer[_dto.GetMemberDescription(x => x.Name)], item => item.Name }, + { _localizer[_dto.GetMemberDescription(x => x.Description)], item => item.Description } + } + , _localizer[_dto.GetClassDescription()]); + return await Result.SuccessAsync(result); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Queries/GetAll/GetAllCustomersQuery.cs b/src/Application/Features/Customers/Queries/GetAll/GetAllCustomersQuery.cs index 9424595ad..14342b034 100644 --- a/src/Application/Features/Customers/Queries/GetAll/GetAllCustomersQuery.cs +++ b/src/Application/Features/Customers/Queries/GetAll/GetAllCustomersQuery.cs @@ -1,43 +1,42 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; using CleanArchitecture.Blazor.Application.Features.Customers.Caching; +using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; namespace CleanArchitecture.Blazor.Application.Features.Customers.Queries.GetAll; public class GetAllCustomersQuery : ICacheableRequest> { - public string CacheKey => CustomerCacheKey.GetAllCacheKey; - public MemoryCacheEntryOptions? Options => CustomerCacheKey.MemoryCacheEntryOptions; + public string CacheKey => CustomerCacheKey.GetAllCacheKey; + public MemoryCacheEntryOptions? Options => CustomerCacheKey.MemoryCacheEntryOptions; } public class GetAllCustomersQueryHandler : - IRequestHandler> + IRequestHandler> { private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; public GetAllCustomersQueryHandler( IApplicationDbContext context, IMapper mapper, IStringLocalizer localizer - ) + ) { _context = context; _mapper = mapper; _localizer = localizer; } - public async Task> Handle(GetAllCustomersQuery request, CancellationToken cancellationToken) + public async Task> Handle(GetAllCustomersQuery request, + CancellationToken cancellationToken) { var data = await _context.Customers - .ProjectTo(_mapper.ConfigurationProvider) - .AsNoTracking() - .ToListAsync(cancellationToken); + .ProjectTo(_mapper.ConfigurationProvider) + .AsNoTracking() + .ToListAsync(cancellationToken); return data; } -} - - +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Queries/GetById/GetCustomerByIdQuery.cs b/src/Application/Features/Customers/Queries/GetById/GetCustomerByIdQuery.cs index cde636f1f..83e2ee69b 100644 --- a/src/Application/Features/Customers/Queries/GetById/GetCustomerByIdQuery.cs +++ b/src/Application/Features/Customers/Queries/GetById/GetCustomerByIdQuery.cs @@ -1,31 +1,31 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; using CleanArchitecture.Blazor.Application.Features.Customers.Caching; +using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; using CleanArchitecture.Blazor.Application.Features.Customers.Specifications; namespace CleanArchitecture.Blazor.Application.Features.Customers.Queries.GetById; public class GetCustomerByIdQuery : ICacheableRequest { - public required int Id { get; set; } - public string CacheKey => CustomerCacheKey.GetByIdCacheKey($"{Id}"); - public MemoryCacheEntryOptions? Options => CustomerCacheKey.MemoryCacheEntryOptions; + public required int Id { get; set; } + public string CacheKey => CustomerCacheKey.GetByIdCacheKey($"{Id}"); + public MemoryCacheEntryOptions? Options => CustomerCacheKey.MemoryCacheEntryOptions; } public class GetCustomerByIdQueryHandler : - IRequestHandler + IRequestHandler { private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; public GetCustomerByIdQueryHandler( IApplicationDbContext context, IMapper mapper, IStringLocalizer localizer - ) + ) { _context = context; _mapper = mapper; @@ -35,8 +35,9 @@ IStringLocalizer localizer public async Task Handle(GetCustomerByIdQuery request, CancellationToken cancellationToken) { var data = await _context.Customers.ApplySpecification(new CustomerByIdSpecification(request.Id)) - .ProjectTo(_mapper.ConfigurationProvider) - .FirstAsync(cancellationToken) ?? throw new NotFoundException($"Customer with id: [{request.Id}] not found."); + .ProjectTo(_mapper.ConfigurationProvider) + .FirstAsync(cancellationToken) ?? + throw new NotFoundException($"Customer with id: [{request.Id}] not found."); return data; } -} +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Queries/Pagination/CustomersPaginationQuery.cs b/src/Application/Features/Customers/Queries/Pagination/CustomersPaginationQuery.cs index e26ed3497..2ac032150 100644 --- a/src/Application/Features/Customers/Queries/Pagination/CustomersPaginationQuery.cs +++ b/src/Application/Features/Customers/Queries/Pagination/CustomersPaginationQuery.cs @@ -1,45 +1,48 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; using CleanArchitecture.Blazor.Application.Features.Customers.Caching; +using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; using CleanArchitecture.Blazor.Application.Features.Customers.Specifications; namespace CleanArchitecture.Blazor.Application.Features.Customers.Queries.Pagination; public class CustomersWithPaginationQuery : CustomerAdvancedFilter, ICacheableRequest> { + public CustomerAdvancedSpecification Specification => new(this); + public string CacheKey => CustomerCacheKey.GetPaginationCacheKey($"{this}"); + public MemoryCacheEntryOptions? Options => CustomerCacheKey.MemoryCacheEntryOptions; + public override string ToString() { return $"Listview:{ListView}, Search:{Keyword}, {OrderBy}, {SortDirection}, {PageNumber}, {PageSize}"; } - public string CacheKey => CustomerCacheKey.GetPaginationCacheKey($"{this}"); - public MemoryCacheEntryOptions? Options => CustomerCacheKey.MemoryCacheEntryOptions; - public CustomerAdvancedSpecification Specification => new CustomerAdvancedSpecification(this); } - + public class CustomersWithPaginationQueryHandler : - IRequestHandler> + IRequestHandler> { - private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; - private readonly IStringLocalizer _localizer; + private readonly IApplicationDbContext _context; + private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; - public CustomersWithPaginationQueryHandler( - IApplicationDbContext context, - IMapper mapper, - IStringLocalizer localizer - ) - { - _context = context; - _mapper = mapper; - _localizer = localizer; - } + public CustomersWithPaginationQueryHandler( + IApplicationDbContext context, + IMapper mapper, + IStringLocalizer localizer + ) + { + _context = context; + _mapper = mapper; + _localizer = localizer; + } - public async Task> Handle(CustomersWithPaginationQuery request, CancellationToken cancellationToken) - { - var data = await _context.Customers.OrderBy($"{request.OrderBy} {request.SortDirection}") - .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, _mapper.ConfigurationProvider, cancellationToken); - return data; - } + public async Task> Handle(CustomersWithPaginationQuery request, + CancellationToken cancellationToken) + { + var data = await _context.Customers.OrderBy($"{request.OrderBy} {request.SortDirection}") + .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, + request.PageSize, _mapper.ConfigurationProvider, cancellationToken); + return data; + } } \ No newline at end of file diff --git a/src/Application/Features/Customers/Specifications/CustomerAdvancedFilter.cs b/src/Application/Features/Customers/Specifications/CustomerAdvancedFilter.cs index 8de6edcfa..05a8e218b 100644 --- a/src/Application/Features/Customers/Specifications/CustomerAdvancedFilter.cs +++ b/src/Application/Features/Customers/Specifications/CustomerAdvancedFilter.cs @@ -2,17 +2,15 @@ #nullable disable warnings public enum CustomerListView { - [Description("All")] - All, - [Description("My")] - My, - [Description("Created Toady")] - CreatedToday, + [Description("All")] All, + [Description("My")] My, + [Description("Created Toady")] CreatedToday, + [Description("Created within the last 30 days")] Created30Days } -public class CustomerAdvancedFilter: PaginationFilter +public class CustomerAdvancedFilter : PaginationFilter { public CustomerListView ListView { get; set; } = CustomerListView.All; public UserProfile? CurrentUser { get; set; } diff --git a/src/Application/Features/Customers/Specifications/CustomerAdvancedSpecification.cs b/src/Application/Features/Customers/Specifications/CustomerAdvancedSpecification.cs index bac39cbd3..df73ceb49 100644 --- a/src/Application/Features/Customers/Specifications/CustomerAdvancedSpecification.cs +++ b/src/Application/Features/Customers/Specifications/CustomerAdvancedSpecification.cs @@ -13,11 +13,12 @@ public CustomerAdvancedSpecification(CustomerAdvancedFilter filter) today.AddDays(-30).ToString("yyyy-MM-dd", CultureInfo.CurrentCulture) + " 00:00:00", CultureInfo.CurrentCulture); - Query.Where(q => q.Name != null) - .Where(q => q.Name!.Contains(filter.Keyword) || q.Description!.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)) - .Where(q => q.CreatedBy == filter.CurrentUser.UserId, filter.ListView == CustomerListView.My && filter.CurrentUser is not null) - .Where(q => q.Created >= start && q.Created <= end, filter.ListView == CustomerListView.CreatedToday) - .Where(q => q.Created >= last30day, filter.ListView == CustomerListView.Created30Days); - + Query.Where(q => q.Name != null) + .Where(q => q.Name!.Contains(filter.Keyword) || q.Description!.Contains(filter.Keyword), + !string.IsNullOrEmpty(filter.Keyword)) + .Where(q => q.CreatedBy == filter.CurrentUser.UserId, + filter.ListView == CustomerListView.My && filter.CurrentUser is not null) + .Where(q => q.Created >= start && q.Created <= end, filter.ListView == CustomerListView.CreatedToday) + .Where(q => q.Created >= last30day, filter.ListView == CustomerListView.Created30Days); } -} +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Specifications/CustomerByIdSpecification.cs b/src/Application/Features/Customers/Specifications/CustomerByIdSpecification.cs index b98dccaa5..9fa9b8f92 100644 --- a/src/Application/Features/Customers/Specifications/CustomerByIdSpecification.cs +++ b/src/Application/Features/Customers/Specifications/CustomerByIdSpecification.cs @@ -4,6 +4,6 @@ public class CustomerByIdSpecification : Specification { public CustomerByIdSpecification(int id) { - Query.Where(q => q.Id == id); + Query.Where(q => q.Id == id); } } \ No newline at end of file diff --git a/src/Application/Features/Documents/Commands/AddEdit/AddEditDocumentCommand.cs b/src/Application/Features/Documents/Commands/AddEdit/AddEditDocumentCommand.cs index 16b4092a2..79f8dcd68 100644 --- a/src/Application/Features/Documents/Commands/AddEdit/AddEditDocumentCommand.cs +++ b/src/Application/Features/Documents/Commands/AddEdit/AddEditDocumentCommand.cs @@ -61,7 +61,6 @@ IUploadService uploadService public async Task> Handle(AddEditDocumentCommand request, CancellationToken cancellationToken) { - if (request.Id > 0) { var document = await _context.Documents.FindAsync(new object[] { request.Id }, cancellationToken); diff --git a/src/Application/Features/Documents/Commands/AddEdit/AddEditDocumentCommandValidator.cs b/src/Application/Features/Documents/Commands/AddEdit/AddEditDocumentCommandValidator.cs index cc42d6ed4..9ff310d44 100644 --- a/src/Application/Features/Documents/Commands/AddEdit/AddEditDocumentCommandValidator.cs +++ b/src/Application/Features/Documents/Commands/AddEdit/AddEditDocumentCommandValidator.cs @@ -19,6 +19,4 @@ public AddEditDocumentCommandValidator() .NotNull() .When(x => x.Id <= 0); } - - } \ No newline at end of file diff --git a/src/Application/Features/Documents/Commands/Upload/UploadDocumentCommand.cs b/src/Application/Features/Documents/Commands/Upload/UploadDocumentCommand.cs index 76193fa4d..2587ab0a0 100644 --- a/src/Application/Features/Documents/Commands/Upload/UploadDocumentCommand.cs +++ b/src/Application/Features/Documents/Commands/Upload/UploadDocumentCommand.cs @@ -47,8 +47,7 @@ public async Task> Handle(UploadDocumentCommand request, Cancellatio URL = url, Status = JobStatus.Queueing, IsPublic = true, - DocumentType = DocumentType.Image, - + DocumentType = DocumentType.Image }; document.AddDomainEvent(new CreatedEvent(document)); list.Add(document); @@ -59,6 +58,5 @@ public async Task> Handle(UploadDocumentCommand request, Cancellatio await _context.Documents.AddRangeAsync(list, cancellationToken); var result = await _context.SaveChangesAsync(cancellationToken); return await Result.SuccessAsync(result); - } } \ No newline at end of file diff --git a/src/Application/Features/Documents/DTOs/DocumentDto.cs b/src/Application/Features/Documents/DTOs/DocumentDto.cs index 16fbbc1d3..d55c2310b 100644 --- a/src/Application/Features/Documents/DTOs/DocumentDto.cs +++ b/src/Application/Features/Documents/DTOs/DocumentDto.cs @@ -38,7 +38,7 @@ public Mapping() .ForMember(x => x.TenantName, s => s.MapFrom(y => y.Tenant!.Name)); CreateMap(MemberList.None) .ForMember(x => x.Tenant, s => s.Ignore()) - .ForMember(x=>x.Owner, s=>s.Ignore()); + .ForMember(x => x.Owner, s => s.Ignore()); } } } \ No newline at end of file diff --git a/src/Application/Features/Documents/Queries/GetFileStream/GetFileStreamQuery.cs b/src/Application/Features/Documents/Queries/GetFileStream/GetFileStreamQuery.cs index 3ee91c73d..e124234b6 100644 --- a/src/Application/Features/Documents/Queries/GetFileStream/GetFileStreamQuery.cs +++ b/src/Application/Features/Documents/Queries/GetFileStream/GetFileStreamQuery.cs @@ -25,10 +25,9 @@ public class GetFileStreamQueryHandler : IRequestHandler Handle(GetFileStreamQuery request, CancellationToken cancellationToken) @@ -49,9 +48,10 @@ internal class DocumentsQuery : Specification { public DocumentsQuery(string userId, string tenantId, string keyword) { - Query.Where(p=>(p.CreatedBy == userId && p.IsPublic == false) || p.IsPublic == true) - .Where(x => x.TenantId == tenantId, !string.IsNullOrEmpty(tenantId) ) - .Where(x => x.Title!.Contains(keyword) || x.Description!.Contains(keyword),!string.IsNullOrEmpty(keyword)); + Query.Where(p => (p.CreatedBy == userId && p.IsPublic == false) || p.IsPublic == true) + .Where(x => x.TenantId == tenantId, !string.IsNullOrEmpty(tenantId)) + .Where(x => x.Title!.Contains(keyword) || x.Description!.Contains(keyword), + !string.IsNullOrEmpty(keyword)); } } } \ No newline at end of file diff --git a/src/Application/Features/Documents/Queries/PaginationQuery/DocumentsWithPaginationQuery.cs b/src/Application/Features/Documents/Queries/PaginationQuery/DocumentsWithPaginationQuery.cs index 2d1bc6146..0def7000b 100644 --- a/src/Application/Features/Documents/Queries/PaginationQuery/DocumentsWithPaginationQuery.cs +++ b/src/Application/Features/Documents/Queries/PaginationQuery/DocumentsWithPaginationQuery.cs @@ -9,7 +9,8 @@ namespace CleanArchitecture.Blazor.Application.Features.Documents.Queries.Pagina public class DocumentsWithPaginationQuery : AdvancedDocumentsFilter, ICacheableRequest> { - + public AdvancedDocumentsSpecification Specification => new(this); + public string CacheKey => DocumentCacheKey.GetPaginationCacheKey($"{this}"); public MemoryCacheEntryOptions? Options => DocumentCacheKey.MemoryCacheEntryOptions; @@ -18,8 +19,6 @@ public override string ToString() return $"CurrentUserId:{CurrentUser?.UserId},ListView:{ListView},Search:{Keyword},OrderBy:{OrderBy} {SortDirection},{PageNumber},{PageSize}"; } - - public AdvancedDocumentsSpecification Specification =>new AdvancedDocumentsSpecification(this); } public class DocumentsQueryHandler : IRequestHandler> @@ -40,12 +39,9 @@ public async Task> Handle(DocumentsWithPaginationQuer CancellationToken cancellationToken) { var data = await _context.Documents.OrderBy($"{request.OrderBy} {request.SortDirection}") - .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, _mapper.ConfigurationProvider, cancellationToken); + .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, + request.PageSize, _mapper.ConfigurationProvider, cancellationToken); return data; } - - -} - - +} \ No newline at end of file diff --git a/src/Application/Features/Documents/Specifications/AdvancedDocumentsFilter.cs b/src/Application/Features/Documents/Specifications/AdvancedDocumentsFilter.cs index b48cbec71..40a06fbca 100644 --- a/src/Application/Features/Documents/Specifications/AdvancedDocumentsFilter.cs +++ b/src/Application/Features/Documents/Specifications/AdvancedDocumentsFilter.cs @@ -5,10 +5,13 @@ public enum DocumentListView [Description("All")] All, [Description("My Document")] My, [Description("Created Toady")] CreatedToday, - [Description("Created within the last 30 days")] Created30Days + + [Description("Created within the last 30 days")] + Created30Days } + public class AdvancedDocumentsFilter : PaginationFilter { public DocumentListView ListView { get; set; } = DocumentListView.All; public required UserProfile CurrentUser { get; set; } -} +} \ No newline at end of file diff --git a/src/Application/Features/Documents/Specifications/AdvancedDocumentsSpecification.cs b/src/Application/Features/Documents/Specifications/AdvancedDocumentsSpecification.cs index b904ab02e..9a0d9fc54 100644 --- a/src/Application/Features/Documents/Specifications/AdvancedDocumentsSpecification.cs +++ b/src/Application/Features/Documents/Specifications/AdvancedDocumentsSpecification.cs @@ -13,13 +13,16 @@ public AdvancedDocumentsSpecification(AdvancedDocumentsFilter filter) today.AddDays(-30).ToString("yyyy-MM-dd", CultureInfo.CurrentCulture) + " 00:00:00", CultureInfo.CurrentCulture); Query.Where(p => - p.CreatedBy == filter.CurrentUser.UserId && p.IsPublic == false || - p.IsPublic == true && p.TenantId == filter.CurrentUser.TenantId, filter.ListView == DocumentListView.All) - .Where(p => - p.CreatedBy == filter.CurrentUser.UserId && p.TenantId == filter.CurrentUser.TenantId, filter.ListView == DocumentListView.My) - .Where(q => q.Created >= start && q.Created <= end, filter.ListView == DocumentListView.CreatedToday) - .Where(q => q.Created >= last30day, filter.ListView == DocumentListView.Created30Days) - .Where(x => x.Title.Contains(filter.Keyword) || x.Description.Contains(filter.Keyword) || x.Content.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)); - + (p.CreatedBy == filter.CurrentUser.UserId && p.IsPublic == false) || + (p.IsPublic == true && p.TenantId == filter.CurrentUser.TenantId), + filter.ListView == DocumentListView.All) + .Where(p => + p.CreatedBy == filter.CurrentUser.UserId && p.TenantId == filter.CurrentUser.TenantId, + filter.ListView == DocumentListView.My) + .Where(q => q.Created >= start && q.Created <= end, filter.ListView == DocumentListView.CreatedToday) + .Where(q => q.Created >= last30day, filter.ListView == DocumentListView.Created30Days) + .Where( + x => x.Title.Contains(filter.Keyword) || x.Description.Contains(filter.Keyword) || + x.Content.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)); } -} +} \ No newline at end of file diff --git a/src/Application/Features/Identity/Commands/ResetPassword/ResetPasswordCommand.cs b/src/Application/Features/Identity/Commands/ResetPassword/ResetPasswordCommand.cs index 6eb91391e..840f62eae 100644 --- a/src/Application/Features/Identity/Commands/ResetPassword/ResetPasswordCommand.cs +++ b/src/Application/Features/Identity/Commands/ResetPassword/ResetPasswordCommand.cs @@ -2,14 +2,15 @@ using Microsoft.AspNetCore.Identity; namespace CleanArchitecture.Blazor.Application.Features.Identity.Commands.ResetPassword; + public record ResetPasswordCommand(string Email) : IRequest; public class ResetPasswordCommandHandler : IRequestHandler { - private readonly UserManager _userManager; private readonly IStringLocalizer _localizer; private readonly IMailService _mailService; private readonly IApplicationSettings _settings; + private readonly UserManager _userManager; public ResetPasswordCommandHandler(UserManager userManager, IStringLocalizer localizer, @@ -27,10 +28,7 @@ public async Task Handle(ResetPasswordCommand request, CancellationToken { var user = await _userManager.FindByEmailAsync(request.Email); - if (user == null) - { - return Result.Failure(_localizer["No user found by email, please contact the administrator"]); - } + if (user == null) return Result.Failure(_localizer["No user found by email, please contact the administrator"]); var resetPasswordToken = await _userManager.GeneratePasswordResetTokenAsync(user); @@ -41,8 +39,8 @@ public async Task Handle(ResetPasswordCommand request, CancellationToken "_recoverypassword", new { - AppName = _settings.AppName, - Email = request.Email, + _settings.AppName, + request.Email, Token = resetPasswordToken }); @@ -51,4 +49,4 @@ public async Task Handle(ResetPasswordCommand request, CancellationToken : Result.Failure(string.Format(_localizer["{0}, please contact the administrator"], sendMailResult.ErrorMessages.FirstOrDefault())); } -} +} \ No newline at end of file diff --git a/src/Application/Features/KeyValues/Commands/AddEdit/AddEditKeyValueCommand.cs b/src/Application/Features/KeyValues/Commands/AddEdit/AddEditKeyValueCommand.cs index 779f7cf5c..0211a9812 100644 --- a/src/Application/Features/KeyValues/Commands/AddEdit/AddEditKeyValueCommand.cs +++ b/src/Application/Features/KeyValues/Commands/AddEdit/AddEditKeyValueCommand.cs @@ -26,7 +26,7 @@ private class Mapping : Profile { public Mapping() { - CreateMap(MemberList.None); + CreateMap(MemberList.None); CreateMap(MemberList.None); } } diff --git a/src/Application/Features/KeyValues/Commands/AddEdit/AddEditKeyValueCommandValidator.cs b/src/Application/Features/KeyValues/Commands/AddEdit/AddEditKeyValueCommandValidator.cs index 00d523f43..72ff85634 100644 --- a/src/Application/Features/KeyValues/Commands/AddEdit/AddEditKeyValueCommandValidator.cs +++ b/src/Application/Features/KeyValues/Commands/AddEdit/AddEditKeyValueCommandValidator.cs @@ -11,6 +11,4 @@ public AddEditKeyValueCommandValidator() RuleFor(v => v.Text).MaximumLength(256).NotEmpty(); RuleFor(v => v.Value).MaximumLength(256).NotEmpty(); } - - } \ No newline at end of file diff --git a/src/Application/Features/KeyValues/Commands/Import/ImportKeyValuesCommand.cs b/src/Application/Features/KeyValues/Commands/Import/ImportKeyValuesCommand.cs index 0b064b18e..b2c081fb1 100644 --- a/src/Application/Features/KeyValues/Commands/Import/ImportKeyValuesCommand.cs +++ b/src/Application/Features/KeyValues/Commands/Import/ImportKeyValuesCommand.cs @@ -88,7 +88,7 @@ public async Task Handle(ImportKeyValuesCommand request, CancellationTok { var validationResult = await _addValidator.ValidateAsync( new AddEditKeyValueCommand - { Name = item.Name, Value = item.Value, Description = item.Description, Text = item.Text }, + { Name = item.Name, Value = item.Value, Description = item.Description, Text = item.Text }, cancellationToken); if (validationResult.IsValid) { diff --git a/src/Application/Features/KeyValues/Queries/PaginationQuery/KeyValuesWithPaginationQuery.cs b/src/Application/Features/KeyValues/Queries/PaginationQuery/KeyValuesWithPaginationQuery.cs index 93a25b41b..bc8b188b7 100644 --- a/src/Application/Features/KeyValues/Queries/PaginationQuery/KeyValuesWithPaginationQuery.cs +++ b/src/Application/Features/KeyValues/Queries/PaginationQuery/KeyValuesWithPaginationQuery.cs @@ -9,14 +9,15 @@ namespace CleanArchitecture.Blazor.Application.Features.KeyValues.Queries.Pagina public class KeyValuesWithPaginationQuery : KeyValueAdvancedFilter, ICacheableRequest> { - + public KeyValueAdvancedSpecification Specification => new(this); + public string CacheKey => $"{nameof(KeyValuesWithPaginationQuery)},{this}"; public MemoryCacheEntryOptions? Options => KeyValueCacheKey.MemoryCacheEntryOptions; + public override string ToString() { return $"Picklist:{Picklist},Search:{Keyword},OrderBy:{OrderBy} {SortDirection},{PageNumber},{PageSize}"; } - public KeyValueAdvancedSpecification Specification => new KeyValueAdvancedSpecification(this); } public class KeyValuesQueryHandler : IRequestHandler> @@ -37,8 +38,9 @@ public async Task> Handle(KeyValuesWithPaginationQuer CancellationToken cancellationToken) { var data = await _context.KeyValues.OrderBy($"{request.OrderBy} {request.SortDirection}") - .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, _mapper.ConfigurationProvider, cancellationToken); + .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, + request.PageSize, _mapper.ConfigurationProvider, cancellationToken); return data; } -} +} \ No newline at end of file diff --git a/src/Application/Features/KeyValues/Specifications/KeyValueAdvancedFilter.cs b/src/Application/Features/KeyValues/Specifications/KeyValueAdvancedFilter.cs index 88073380a..acc26143f 100644 --- a/src/Application/Features/KeyValues/Specifications/KeyValueAdvancedFilter.cs +++ b/src/Application/Features/KeyValues/Specifications/KeyValueAdvancedFilter.cs @@ -1,5 +1,6 @@ namespace CleanArchitecture.Blazor.Application.Features.KeyValues.Specifications; -public class KeyValueAdvancedFilter: PaginationFilter + +public class KeyValueAdvancedFilter : PaginationFilter { public Picklist? Picklist { get; set; } -} +} \ No newline at end of file diff --git a/src/Application/Features/KeyValues/Specifications/KeyValueAdvancedSpecification.cs b/src/Application/Features/KeyValues/Specifications/KeyValueAdvancedSpecification.cs index 155c9a607..acaeeb2f9 100644 --- a/src/Application/Features/KeyValues/Specifications/KeyValueAdvancedSpecification.cs +++ b/src/Application/Features/KeyValues/Specifications/KeyValueAdvancedSpecification.cs @@ -5,7 +5,8 @@ public class KeyValueAdvancedSpecification : Specification public KeyValueAdvancedSpecification(KeyValueAdvancedFilter filter) { Query.Where(p => p.Name == filter.Picklist, filter.Picklist is not null) - .Where(x => x.Description.Contains(filter.Keyword) || x.Text.Contains(filter.Keyword) || x.Value.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)); - + .Where( + x => x.Description.Contains(filter.Keyword) || x.Text.Contains(filter.Keyword) || + x.Value.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)); } -} +} \ No newline at end of file diff --git a/src/Application/Features/Loggers/DTOs/LogDto.cs b/src/Application/Features/Loggers/DTOs/LogDto.cs index adaf7012b..1321c00fe 100644 --- a/src/Application/Features/Loggers/DTOs/LogDto.cs +++ b/src/Application/Features/Loggers/DTOs/LogDto.cs @@ -1,8 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Domain.Entities; - namespace CleanArchitecture.Blazor.Application.Features.Loggers.DTOs; public class LogDto diff --git a/src/Application/Features/Loggers/Queries/PaginationQuery/LogsWithPaginationQuery.cs b/src/Application/Features/Loggers/Queries/PaginationQuery/LogsWithPaginationQuery.cs index 3cb056718..da298cfd5 100644 --- a/src/Application/Features/Loggers/Queries/PaginationQuery/LogsWithPaginationQuery.cs +++ b/src/Application/Features/Loggers/Queries/PaginationQuery/LogsWithPaginationQuery.cs @@ -4,20 +4,21 @@ using CleanArchitecture.Blazor.Application.Features.Loggers.Caching; using CleanArchitecture.Blazor.Application.Features.Loggers.DTOs; using CleanArchitecture.Blazor.Application.Features.Loggers.Specifications; -using CleanArchitecture.Blazor.Domain.Entities; namespace CleanArchitecture.Blazor.Application.Features.Loggers.Queries.PaginationQuery; public class LogsWithPaginationQuery : LoggerAdvancedFilter, ICacheableRequest> { - + public LoggerAdvancedSpecification Specification => new(this); + public string CacheKey => LogsCacheKey.GetPaginationCacheKey($"{this}"); public MemoryCacheEntryOptions? Options => LogsCacheKey.MemoryCacheEntryOptions; + public override string ToString() { - return $"Listview:{ListView},{Level},Search:{Keyword},OrderBy:{OrderBy} {SortDirection},{PageNumber},{PageSize}"; + return + $"Listview:{ListView},{Level},Search:{Keyword},OrderBy:{OrderBy} {SortDirection},{PageNumber},{PageSize}"; } - public LoggerAdvancedSpecification Specification => new LoggerAdvancedSpecification(this); } public class LogsQueryHandler : IRequestHandler> @@ -38,10 +39,8 @@ public async Task> Handle(LogsWithPaginationQuery request, CancellationToken cancellationToken) { var data = await _context.Loggers.OrderBy($"{request.OrderBy} {request.SortDirection}") - .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, _mapper.ConfigurationProvider, cancellationToken); + .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, + _mapper.ConfigurationProvider, cancellationToken); return data; } -} - - - +} \ No newline at end of file diff --git a/src/Application/Features/Loggers/Specifications/LoggerAdvancedFilter.cs b/src/Application/Features/Loggers/Specifications/LoggerAdvancedFilter.cs index 0b1d9e485..fa8d1968f 100644 --- a/src/Application/Features/Loggers/Specifications/LoggerAdvancedFilter.cs +++ b/src/Application/Features/Loggers/Specifications/LoggerAdvancedFilter.cs @@ -1,8 +1,10 @@ namespace CleanArchitecture.Blazor.Application.Features.Loggers.Specifications; + public enum LogListView { [Description("All")] All, [Description("Created Toady")] CreatedToday, + [Description("View of the last 30 days")] Last30days } @@ -11,4 +13,4 @@ public class LoggerAdvancedFilter : PaginationFilter { public LogLevel? Level { get; set; } public LogListView ListView { get; set; } = LogListView.All; -} +} \ No newline at end of file diff --git a/src/Application/Features/Loggers/Specifications/LoggerAdvancedSpecification.cs b/src/Application/Features/Loggers/Specifications/LoggerAdvancedSpecification.cs index 5f232ea67..07d7b4643 100644 --- a/src/Application/Features/Loggers/Specifications/LoggerAdvancedSpecification.cs +++ b/src/Application/Features/Loggers/Specifications/LoggerAdvancedSpecification.cs @@ -1,6 +1,4 @@ -using CleanArchitecture.Blazor.Domain.Entities; - -namespace CleanArchitecture.Blazor.Application.Features.Loggers.Specifications; +namespace CleanArchitecture.Blazor.Application.Features.Loggers.Specifications; #nullable disable warnings public class LoggerAdvancedSpecification : Specification { @@ -15,8 +13,10 @@ public LoggerAdvancedSpecification(LoggerAdvancedFilter filter) Convert.ToDateTime(today.AddDays(-30).ToString("yyyy-MM-dd", CultureInfo.CurrentCulture) + " 00:00:00", CultureInfo.CurrentCulture); Query.Where(p => p.TimeStamp.Date == DateTime.Now.Date, filter.ListView == LogListView.CreatedToday) - .Where(p => p.TimeStamp >= last30days, filter.ListView == LogListView.Last30days) - .Where(p => p.Level == filter.Level.ToString(), filter.Level is not null) - .Where(x => x.Message.Contains(filter.Keyword) || x.Exception.Contains(filter.Keyword) || x.UserName.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)); + .Where(p => p.TimeStamp >= last30days, filter.ListView == LogListView.Last30days) + .Where(p => p.Level == filter.Level.ToString(), filter.Level is not null) + .Where( + x => x.Message.Contains(filter.Keyword) || x.Exception.Contains(filter.Keyword) || + x.UserName.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)); } } \ No newline at end of file diff --git a/src/Application/Features/Products/Caching/ProductCacheKey.cs b/src/Application/Features/Products/Caching/ProductCacheKey.cs index efa0816ce..719ee9171 100644 --- a/src/Application/Features/Products/Caching/ProductCacheKey.cs +++ b/src/Application/Features/Products/Caching/ProductCacheKey.cs @@ -8,11 +8,7 @@ public static class ProductCacheKey public const string GetAllCacheKey = "all-Products"; private static readonly TimeSpan RefreshInterval = TimeSpan.FromHours(1); private static CancellationTokenSource _tokenSource; - private static readonly object _tokenLock = new object(); - public static string GetProductByIdCacheKey(int id) - { - return $"GetProductById,{id}"; - } + private static readonly object _tokenLock = new(); static ProductCacheKey() { @@ -22,6 +18,11 @@ static ProductCacheKey() public static MemoryCacheEntryOptions MemoryCacheEntryOptions => new MemoryCacheEntryOptions().AddExpirationToken(new CancellationChangeToken(SharedExpiryTokenSource().Token)); + public static string GetProductByIdCacheKey(int id) + { + return $"GetProductById,{id}"; + } + public static string GetPaginationCacheKey(string parameters) { return $"ProductsWithPaginationQuery,{parameters}"; @@ -31,10 +32,7 @@ public static CancellationTokenSource SharedExpiryTokenSource() { lock (_tokenLock) { - if (_tokenSource.IsCancellationRequested) - { - _tokenSource = new CancellationTokenSource(RefreshInterval); - } + if (_tokenSource.IsCancellationRequested) _tokenSource = new CancellationTokenSource(RefreshInterval); return _tokenSource; } diff --git a/src/Application/Features/Products/Commands/AddEdit/AddEditProductCommand.cs b/src/Application/Features/Products/Commands/AddEdit/AddEditProductCommand.cs index c8b518d39..f6a750001 100644 --- a/src/Application/Features/Products/Commands/AddEdit/AddEditProductCommand.cs +++ b/src/Application/Features/Products/Commands/AddEdit/AddEditProductCommand.cs @@ -26,7 +26,7 @@ private class Mapping : Profile { public Mapping() { - CreateMap(MemberList.None); + CreateMap(MemberList.None); CreateMap(MemberList.None); } } diff --git a/src/Application/Features/Products/Commands/Delete/DeleteProductCommand.cs b/src/Application/Features/Products/Commands/Delete/DeleteProductCommand.cs index cc8ef6471..015a591fe 100644 --- a/src/Application/Features/Products/Commands/Delete/DeleteProductCommand.cs +++ b/src/Application/Features/Products/Commands/Delete/DeleteProductCommand.cs @@ -38,7 +38,7 @@ IMapper mapper public async Task> Handle(DeleteProductCommand request, CancellationToken cancellationToken) { - var items = await _context.Products.Where(x=>request.Id.Contains(x.Id)).ToListAsync(cancellationToken); + var items = await _context.Products.Where(x => request.Id.Contains(x.Id)).ToListAsync(cancellationToken); foreach (var item in items) { item.AddDomainEvent(new DeletedEvent(item)); diff --git a/src/Application/Features/Products/Queries/Export/ExportProductsQuery.cs b/src/Application/Features/Products/Queries/Export/ExportProductsQuery.cs index 357f5995a..f657f6e4f 100644 --- a/src/Application/Features/Products/Queries/Export/ExportProductsQuery.cs +++ b/src/Application/Features/Products/Queries/Export/ExportProductsQuery.cs @@ -5,14 +5,13 @@ using CleanArchitecture.Blazor.Application.Common.Interfaces.Serialization; using CleanArchitecture.Blazor.Application.Features.Products.DTOs; using CleanArchitecture.Blazor.Application.Features.Products.Specifications; -using CleanArchitecture.Blazor.Domain.Common.Enums; namespace CleanArchitecture.Blazor.Application.Features.Products.Queries.Export; -public class ExportProductsQuery : ProductAdvancedFilter, IRequest> +public class ExportProductsQuery : ProductAdvancedFilter, IRequest> { public ExportType ExportType { get; set; } - public ProductAdvancedSpecification Specification => new ProductAdvancedSpecification(this); + public ProductAdvancedSpecification Specification => new(this); } public class ExportProductsQueryHandler : diff --git a/src/Application/Features/Products/Queries/GetAll/GetAllProductsQuery.cs b/src/Application/Features/Products/Queries/GetAll/GetAllProductsQuery.cs index 3f7222429..b1c4c5f00 100644 --- a/src/Application/Features/Products/Queries/GetAll/GetAllProductsQuery.cs +++ b/src/Application/Features/Products/Queries/GetAll/GetAllProductsQuery.cs @@ -51,9 +51,10 @@ public async Task> Handle(GetAllProductsQuery request, C public async Task Handle(GetProductQuery request, CancellationToken cancellationToken) { - var data = await _context.Products.Where(x=>x.Id==request.Id) - .ProjectTo(_mapper.ConfigurationProvider) - .FirstOrDefaultAsync(cancellationToken)??throw new NotFoundException($"Product with id: {request.Id} not found."); + var data = await _context.Products.Where(x => x.Id == request.Id) + .ProjectTo(_mapper.ConfigurationProvider) + .FirstOrDefaultAsync(cancellationToken) ?? + throw new NotFoundException($"Product with id: {request.Id} not found."); return data; } } \ No newline at end of file diff --git a/src/Application/Features/Products/Queries/Pagination/ProductsPaginationQuery.cs b/src/Application/Features/Products/Queries/Pagination/ProductsPaginationQuery.cs index fa580a919..2599c1c41 100644 --- a/src/Application/Features/Products/Queries/Pagination/ProductsPaginationQuery.cs +++ b/src/Application/Features/Products/Queries/Pagination/ProductsPaginationQuery.cs @@ -10,7 +10,8 @@ namespace CleanArchitecture.Blazor.Application.Features.Products.Queries.Paginat public class ProductsWithPaginationQuery : ProductAdvancedFilter, ICacheableRequest> { - + public ProductAdvancedSpecification Specification => new(this); + public string CacheKey => ProductCacheKey.GetPaginationCacheKey($"{this}"); @@ -20,10 +21,8 @@ public class ProductsWithPaginationQuery : ProductAdvancedFilter, ICacheableRequ public override string ToString() { return - $"CurrentUser:{CurrentUser?.UserId},ListView:{ListView},Search:{Keyword},Name:{Name},Brand:{Brand},Unit:{Unit},MinPrice:{MinPrice},MaxPrice:{MaxPrice},SortDirection:{SortDirection},OrderBy:{OrderBy},{ PageNumber},{PageSize}"; + $"CurrentUser:{CurrentUser?.UserId},ListView:{ListView},Search:{Keyword},Name:{Name},Brand:{Brand},Unit:{Unit},MinPrice:{MinPrice},MaxPrice:{MaxPrice},SortDirection:{SortDirection},OrderBy:{OrderBy},{PageNumber},{PageSize}"; } - - public ProductAdvancedSpecification Specification => new ProductAdvancedSpecification(this); } public class ProductsWithPaginationQueryHandler : @@ -47,9 +46,9 @@ IStringLocalizer localizer public async Task> Handle(ProductsWithPaginationQuery request, CancellationToken cancellationToken) { - var data = await _context.Products.OrderBy($"{request.OrderBy} {request.SortDirection}") - .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, _mapper.ConfigurationProvider, cancellationToken); + .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, + request.PageSize, _mapper.ConfigurationProvider, cancellationToken); return data; } } \ No newline at end of file diff --git a/src/Application/Features/Products/Specifications/ProductAdvancedFilter.cs b/src/Application/Features/Products/Specifications/ProductAdvancedFilter.cs index ec847e930..96f3696e6 100644 --- a/src/Application/Features/Products/Specifications/ProductAdvancedFilter.cs +++ b/src/Application/Features/Products/Specifications/ProductAdvancedFilter.cs @@ -1,4 +1,5 @@ namespace CleanArchitecture.Blazor.Application.Features.Products.Specifications; + public class ProductAdvancedFilter : PaginationFilter { public string? Name { get; set; } @@ -6,6 +7,10 @@ public class ProductAdvancedFilter : PaginationFilter public string? Unit { get; set; } public decimal? MaxPrice { get; set; } public decimal? MinPrice { get; set; } - public ProductListView ListView { get; set; } = ProductListView.All; //<-- When the user selects a different ListView, - public UserProfile? CurrentUser { get; set; } // <-- This CurrentUser property gets its value from the information of -} + + public ProductListView ListView { get; set; } = + ProductListView.All; //<-- When the user selects a different ListView, + + public UserProfile? + CurrentUser { get; set; } // <-- This CurrentUser property gets its value from the information of +} \ No newline at end of file diff --git a/src/Application/Features/Products/Specifications/ProductAdvancedSpecification.cs b/src/Application/Features/Products/Specifications/ProductAdvancedSpecification.cs index b99984304..c3b7767d6 100644 --- a/src/Application/Features/Products/Specifications/ProductAdvancedSpecification.cs +++ b/src/Application/Features/Products/Specifications/ProductAdvancedSpecification.cs @@ -1,4 +1,3 @@ - namespace CleanArchitecture.Blazor.Application.Features.Products.Specifications; #nullable disable warnings public class ProductAdvancedSpecification : Specification @@ -14,17 +13,15 @@ public ProductAdvancedSpecification(ProductAdvancedFilter filter) today.AddDays(-30).ToString("yyyy-MM-dd", CultureInfo.CurrentCulture) + " 00:00:00", CultureInfo.CurrentCulture); Query.Where(x => x.Name != null) - .Where(x => x.Name!.Contains(filter.Keyword) || x.Description!.Contains(filter.Keyword) || - x.Brand!.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)) - .Where(x => x.Name!.Contains(filter.Name), !string.IsNullOrEmpty(filter.Name)) - .Where(x => x.Unit == filter.Unit, !string.IsNullOrEmpty(filter.Unit)) - .Where(x => x.Brand == filter.Brand, !string.IsNullOrEmpty(filter.Brand)) - .Where(x => x.Price <= filter.MaxPrice, !string.IsNullOrEmpty(filter.Brand)) - .Where(x => x.Price >= filter.MinPrice, filter.MinPrice is not null) - .Where(x => x.CreatedBy == filter.CurrentUser.UserId, filter.ListView == ProductListView.My) - .Where(x => x.Created >= start && x.Created <= end, filter.ListView == ProductListView.CreatedToday) - .Where(x => x.Created >= last30day, filter.ListView == ProductListView.Created30Days); - - + .Where(x => x.Name!.Contains(filter.Keyword) || x.Description!.Contains(filter.Keyword) || + x.Brand!.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)) + .Where(x => x.Name!.Contains(filter.Name), !string.IsNullOrEmpty(filter.Name)) + .Where(x => x.Unit == filter.Unit, !string.IsNullOrEmpty(filter.Unit)) + .Where(x => x.Brand == filter.Brand, !string.IsNullOrEmpty(filter.Brand)) + .Where(x => x.Price <= filter.MaxPrice, !string.IsNullOrEmpty(filter.Brand)) + .Where(x => x.Price >= filter.MinPrice, filter.MinPrice is not null) + .Where(x => x.CreatedBy == filter.CurrentUser.UserId, filter.ListView == ProductListView.My) + .Where(x => x.Created >= start && x.Created <= end, filter.ListView == ProductListView.CreatedToday) + .Where(x => x.Created >= last30day, filter.ListView == ProductListView.Created30Days); } -} +} \ No newline at end of file diff --git a/src/Application/Features/Products/Specifications/ProductListView.cs b/src/Application/Features/Products/Specifications/ProductListView.cs index f0e827966..c99e4cd87 100644 --- a/src/Application/Features/Products/Specifications/ProductListView.cs +++ b/src/Application/Features/Products/Specifications/ProductListView.cs @@ -5,5 +5,7 @@ public enum ProductListView [Description("All")] All, [Description("My Products")] My, [Description("Created Toady")] CreatedToday, - [Description("Created within the last 30 days")] Created30Days -} + + [Description("Created within the last 30 days")] + Created30Days +} \ No newline at end of file diff --git a/src/Application/Features/Tenants/Commands/AddEdit/AddEditTenantCommand.cs b/src/Application/Features/Tenants/Commands/AddEdit/AddEditTenantCommand.cs index 623ef1428..51622a6b6 100644 --- a/src/Application/Features/Tenants/Commands/AddEdit/AddEditTenantCommand.cs +++ b/src/Application/Features/Tenants/Commands/AddEdit/AddEditTenantCommand.cs @@ -5,7 +5,6 @@ using CleanArchitecture.Blazor.Application.Common.Interfaces.MultiTenant; using CleanArchitecture.Blazor.Application.Features.Tenants.Caching; using CleanArchitecture.Blazor.Application.Features.Tenants.DTOs; -using CleanArchitecture.Blazor.Domain.Entities; namespace CleanArchitecture.Blazor.Application.Features.Tenants.Commands.AddEdit; @@ -24,7 +23,7 @@ private class Mapping : Profile { public Mapping() { - CreateMap(MemberList.None); + CreateMap(MemberList.None); CreateMap(MemberList.None); } } @@ -32,10 +31,10 @@ public Mapping() public class AddEditTenantCommandHandler : IRequestHandler> { - private readonly ITenantService _tenantsService; private readonly IApplicationDbContext _context; private readonly IStringLocalizer _localizer; private readonly IMapper _mapper; + private readonly ITenantService _tenantsService; public AddEditTenantCommandHandler( ITenantService tenantsService, @@ -52,7 +51,6 @@ IMapper mapper public async Task> Handle(AddEditTenantCommand request, CancellationToken cancellationToken) { - var item = await _context.Tenants.FindAsync(new object[] { request.Id }, cancellationToken); if (item is null) { @@ -63,6 +61,7 @@ public async Task> Handle(AddEditTenantCommand request, Cancellat { item = _mapper.Map(request, item); } + await _context.SaveChangesAsync(cancellationToken); await _tenantsService.Refresh(); return await Result.SuccessAsync(item.Id); diff --git a/src/Application/Features/Tenants/Commands/AddEdit/AddEditTenantCommandValidator.cs b/src/Application/Features/Tenants/Commands/AddEdit/AddEditTenantCommandValidator.cs index 8582a2513..cf99d21f3 100644 --- a/src/Application/Features/Tenants/Commands/AddEdit/AddEditTenantCommandValidator.cs +++ b/src/Application/Features/Tenants/Commands/AddEdit/AddEditTenantCommandValidator.cs @@ -11,6 +11,4 @@ public AddEditTenantCommandValidator() .MaximumLength(256) .NotEmpty(); } - - } \ No newline at end of file diff --git a/src/Application/Features/Tenants/Commands/Delete/DeleteTenantCommand.cs b/src/Application/Features/Tenants/Commands/Delete/DeleteTenantCommand.cs index 1c434c6ed..f64ad2aff 100644 --- a/src/Application/Features/Tenants/Commands/Delete/DeleteTenantCommand.cs +++ b/src/Application/Features/Tenants/Commands/Delete/DeleteTenantCommand.cs @@ -22,10 +22,10 @@ public class DeleteTenantCommandHandler : IRequestHandler> { - private readonly ITenantService _tenantsService; private readonly IApplicationDbContext _context; private readonly IStringLocalizer _localizer; private readonly IMapper _mapper; + private readonly ITenantService _tenantsService; public DeleteTenantCommandHandler( ITenantService tenantsService, @@ -43,10 +43,7 @@ IMapper mapper public async Task> Handle(DeleteTenantCommand request, CancellationToken cancellationToken) { var items = await _context.Tenants.Where(x => request.Id.Contains(x.Id)).ToListAsync(cancellationToken); - foreach (var item in items) - { - _context.Tenants.Remove(item); - } + foreach (var item in items) _context.Tenants.Remove(item); var result = await _context.SaveChangesAsync(cancellationToken); await _tenantsService.Refresh(); diff --git a/src/Application/Features/Tenants/DTOs/TenantDto.cs b/src/Application/Features/Tenants/DTOs/TenantDto.cs index f932b980b..98557a5ef 100644 --- a/src/Application/Features/Tenants/DTOs/TenantDto.cs +++ b/src/Application/Features/Tenants/DTOs/TenantDto.cs @@ -1,8 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Domain.Entities; - namespace CleanArchitecture.Blazor.Application.Features.Tenants.DTOs; [Description("Tenants")] diff --git a/src/Application/Features/Tenants/Queries/Pagination/TenantsPaginationQuery.cs b/src/Application/Features/Tenants/Queries/Pagination/TenantsPaginationQuery.cs index 7b68c86dc..cc9cf5ced 100644 --- a/src/Application/Features/Tenants/Queries/Pagination/TenantsPaginationQuery.cs +++ b/src/Application/Features/Tenants/Queries/Pagination/TenantsPaginationQuery.cs @@ -3,12 +3,12 @@ using CleanArchitecture.Blazor.Application.Features.Tenants.Caching; using CleanArchitecture.Blazor.Application.Features.Tenants.DTOs; -using CleanArchitecture.Blazor.Domain.Entities; namespace CleanArchitecture.Blazor.Application.Features.Tenants.Queries.Pagination; public class TenantsWithPaginationQuery : PaginationFilter, ICacheableRequest> { + public TenantsPaginationSpecification Specification => new(this); public string CacheKey => TenantCacheKey.GetPaginationCacheKey($"{this}"); public MemoryCacheEntryOptions? Options => TenantCacheKey.MemoryCacheEntryOptions; @@ -16,7 +16,6 @@ public override string ToString() { return $"Search:{Keyword},OrderBy:{OrderBy} {SortDirection},{PageNumber},{PageSize}"; } - public TenantsPaginationSpecification Specification => new TenantsPaginationSpecification(this); } public class TenantsWithPaginationQueryHandler : @@ -41,7 +40,8 @@ public async Task> Handle(TenantsWithPaginationQuery re CancellationToken cancellationToken) { var data = await _context.Tenants.OrderBy($"{request.OrderBy} {request.SortDirection}") - .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, _mapper.ConfigurationProvider, cancellationToken); + .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, + _mapper.ConfigurationProvider, cancellationToken); return data; } } @@ -51,6 +51,7 @@ public class TenantsPaginationSpecification : Specification public TenantsPaginationSpecification(TenantsWithPaginationQuery query) { Query.Where(q => q.Name != null) - .Where(q => q.Name.Contains(query.Keyword) || q.Description.Contains(query.Keyword), !string.IsNullOrEmpty(query.Keyword)); + .Where(q => q.Name.Contains(query.Keyword) || q.Description.Contains(query.Keyword), + !string.IsNullOrEmpty(query.Keyword)); } } \ No newline at end of file diff --git a/src/Application/Pipeline/AuthorizationBehaviour.cs b/src/Application/Pipeline/AuthorizationBehaviour.cs index f23bad546..93521fbcc 100644 --- a/src/Application/Pipeline/AuthorizationBehaviour.cs +++ b/src/Application/Pipeline/AuthorizationBehaviour.cs @@ -6,7 +6,8 @@ namespace CleanArchitecture.Blazor.Application.Pipeline; -public class AuthorizationBehaviour : IPipelineBehavior where TRequest : IRequest +public class AuthorizationBehaviour : IPipelineBehavior + where TRequest : IRequest { private readonly ICurrentUserService _currentUserService; private readonly IIdentityService _identityService; @@ -19,17 +20,15 @@ public AuthorizationBehaviour( _identityService = identityService; } - public async Task Handle(TRequest request, RequestHandlerDelegate next, CancellationToken cancellationToken) + public async Task Handle(TRequest request, RequestHandlerDelegate next, + CancellationToken cancellationToken) { var authorizeAttributes = request.GetType().GetCustomAttributes(); if (authorizeAttributes.Any()) { // Must be authenticated user var userId = _currentUserService.UserId; - if (string.IsNullOrEmpty(userId)) - { - throw new UnauthorizedAccessException(); - } + if (string.IsNullOrEmpty(userId)) throw new UnauthorizedAccessException(); // DefaultRole-based authorization var authorizeAttributesWithRoles = authorizeAttributes.Where(a => !string.IsNullOrWhiteSpace(a.Roles)); @@ -39,42 +38,32 @@ public async Task Handle(TRequest request, RequestHandlerDelegate a.Roles.Split(','))) + foreach (var role in roles) { - foreach (var role in roles) + var isInRole = await _identityService.IsInRoleAsync(userId, role.Trim()); + if (isInRole) { - var isInRole = await _identityService.IsInRoleAsync(userId, role.Trim()); - if (isInRole) - { - authorized = true; - break; - } + authorized = true; + break; } } // Must be a member of at least one role in roles - if (!authorized) - { - throw new ForbiddenException("You are not authorized to access this resource."); - } + if (!authorized) throw new ForbiddenException("You are not authorized to access this resource."); } // Policy-based authorization var authorizeAttributesWithPolicies = authorizeAttributes.Where(a => !string.IsNullOrWhiteSpace(a.Policy)); if (authorizeAttributesWithPolicies.Any()) - { foreach (var policy in authorizeAttributesWithPolicies.Select(a => a.Policy)) { var authorized = await _identityService.AuthorizeAsync(userId, policy); - if (!authorized) - { - throw new ForbiddenException("You are not authorized to access this resource."); - } + if (!authorized) throw new ForbiddenException("You are not authorized to access this resource."); } - } } // User is authorized / authorization not required return await next().ConfigureAwait(false); } -} +} \ No newline at end of file diff --git a/src/Application/Pipeline/CacheInvalidationBehaviour.cs b/src/Application/Pipeline/CacheInvalidationBehaviour.cs index 14440f294..4860015df 100644 --- a/src/Application/Pipeline/CacheInvalidationBehaviour.cs +++ b/src/Application/Pipeline/CacheInvalidationBehaviour.cs @@ -4,7 +4,7 @@ namespace CleanArchitecture.Blazor.Application.Pipeline; public class CacheInvalidationBehaviour : IPipelineBehavior - where TRequest : ICacheInvalidatorRequest + where TRequest : ICacheInvalidatorRequest { private readonly IAppCache _cache; private readonly ILogger> _logger; @@ -12,20 +12,19 @@ public class CacheInvalidationBehaviour : IPipelineBehavior public CacheInvalidationBehaviour( IAppCache cache, ILogger> logger - ) + ) { _cache = cache; _logger = logger; } - public async Task Handle(TRequest request, RequestHandlerDelegate next, CancellationToken cancellationToken) + + public async Task Handle(TRequest request, RequestHandlerDelegate next, + CancellationToken cancellationToken) { _logger.LogTrace("{Name} cache expire with {@Request}", nameof(request), request); var response = await next().ConfigureAwait(false); - if (!string.IsNullOrEmpty(request.CacheKey)) - { - _cache.Remove(request.CacheKey); - } + if (!string.IsNullOrEmpty(request.CacheKey)) _cache.Remove(request.CacheKey); request.SharedExpiryTokenSource?.Cancel(); return response; } -} +} \ No newline at end of file diff --git a/src/Application/Pipeline/MemoryCacheBehaviour.cs b/src/Application/Pipeline/MemoryCacheBehaviour.cs index 226f95b06..99bd26f92 100644 --- a/src/Application/Pipeline/MemoryCacheBehaviour.cs +++ b/src/Application/Pipeline/MemoryCacheBehaviour.cs @@ -12,20 +12,22 @@ public class MemoryCacheBehaviour : IPipelineBehavior> logger - ) + ) { _cache = cache; _logger = logger; } - public async Task Handle(TRequest request, RequestHandlerDelegate next, CancellationToken cancellationToken) + + public async Task Handle(TRequest request, RequestHandlerDelegate next, + CancellationToken cancellationToken) { _logger.LogTrace("{Name} is caching with {@Request}", nameof(request), request); var response = await _cache.GetOrAddAsync( request.CacheKey, async () => - await next(), + await next(), request.Options).ConfigureAwait(false); return response; } -} +} \ No newline at end of file diff --git a/src/Application/Pipeline/PreProcessors/LoggingPreProcessor.cs b/src/Application/Pipeline/PreProcessors/LoggingPreProcessor.cs index 996f570b5..21db4ef3f 100644 --- a/src/Application/Pipeline/PreProcessors/LoggingPreProcessor.cs +++ b/src/Application/Pipeline/PreProcessors/LoggingPreProcessor.cs @@ -5,15 +5,14 @@ namespace CleanArchitecture.Blazor.Application.Pipeline.PreProcessors; public class LoggingPreProcessor : IRequestPreProcessor where TRequest : notnull { - private readonly ILogger _logger; private readonly ICurrentUserService _currentUserService; + private readonly ILogger _logger; public LoggingPreProcessor(ILogger logger, ICurrentUserService currentUserService) { _logger = logger; _currentUserService = currentUserService; - } public Task Process(TRequest request, CancellationToken cancellationToken) @@ -24,4 +23,4 @@ public Task Process(TRequest request, CancellationToken cancellationToken) requestName, request, userName); return Task.CompletedTask; } -} +} \ No newline at end of file diff --git a/src/Application/Pipeline/PreProcessors/ValidationPreProcessor.cs b/src/Application/Pipeline/PreProcessors/ValidationPreProcessor.cs index e2554a7ae..0c49ed1f6 100644 --- a/src/Application/Pipeline/PreProcessors/ValidationPreProcessor.cs +++ b/src/Application/Pipeline/PreProcessors/ValidationPreProcessor.cs @@ -1,10 +1,13 @@ namespace CleanArchitecture.Blazor.Application.Pipeline.PreProcessors; + public sealed class ValidationPreProcessor : IRequestPreProcessor where TRequest : notnull { private readonly IReadOnlyCollection> _validators; - public ValidationPreProcessor(IEnumerable> validators) => + public ValidationPreProcessor(IEnumerable> validators) + { _validators = validators.ToList() ?? throw new ArgumentNullException(nameof(validators)); + } public async Task Process(TRequest request, CancellationToken cancellationToken) { @@ -16,4 +19,4 @@ public async Task Process(TRequest request, CancellationToken cancellationToken) if (failures.Any()) throw new ValidationException(failures); } -} +} \ No newline at end of file diff --git a/src/Application/Pipeline/UnhandledExceptionBehaviour.cs b/src/Application/Pipeline/UnhandledExceptionBehaviour.cs index 8c132b9c3..308f7aebe 100644 --- a/src/Application/Pipeline/UnhandledExceptionBehaviour.cs +++ b/src/Application/Pipeline/UnhandledExceptionBehaviour.cs @@ -3,10 +3,11 @@ namespace CleanArchitecture.Blazor.Application.Pipeline; -public class UnhandledExceptionBehaviour : IPipelineBehavior where TRequest : IRequest +public class UnhandledExceptionBehaviour : IPipelineBehavior + where TRequest : IRequest { - private readonly ILogger _logger; private readonly ICurrentUserService _currentUserService; + private readonly ILogger _logger; public UnhandledExceptionBehaviour(ILogger logger, ICurrentUserService currentUserService) { @@ -14,7 +15,8 @@ public UnhandledExceptionBehaviour(ILogger logger, ICurrentUserService _currentUserService = currentUserService; } - public async Task Handle(TRequest request, RequestHandlerDelegate next, CancellationToken cancellationToken) + public async Task Handle(TRequest request, RequestHandlerDelegate next, + CancellationToken cancellationToken) { try { @@ -24,8 +26,9 @@ public async Task Handle(TRequest request, RequestHandlerDelegate - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - La vostra contrasenya no pot estar buida + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + La vostra contrasenya ha de contenir almenys una lletra majúscula. - - La vostra contrasenya no ha de superar els {0} caràcters. + + La vostra contrasenya ha de contenir almenys una lletra minúscula. - - La vostra contrasenya ha de tenir com a mínim {0} caràcters + + La vostra contrasenya ha de contenir un dígit - - La vostra contrasenya ha de contenir un caràcter alfanumèric + + La vostra contrasenya ha de contenir un caràcter alfanumèric - - La vostra contrasenya ha de contenir un dígit + + La vostra contrasenya ha de tenir com a mínim {0} caràcters - - La vostra contrasenya ha de contenir almenys una lletra majúscula. + + La vostra contrasenya no ha de superar els {0} caràcters. - - La vostra contrasenya ha de contenir almenys una lletra minúscula. + + La vostra contrasenya no pot estar buida \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.de-DE.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.de-DE.resx index b566aefad..b7953076a 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.de-DE.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.de-DE.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Ihr Passwort darf nicht leer sein + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Ihr Passwort muss mindestens einen Großbuchstaben enthalten. - - Ihr Passwort darf nicht länger als {0} Zeichen sein. + + Ihr Passwort muss mindestens einen Kleinbuchstaben enthalten. - - Ihr Passwort muss mindestens {0} Zeichen lang sein + + Ihr Passwort muss eine Ziffer enthalten - - Ihr Passwort muss ein alphanumerisches Zeichen enthalten + + Ihr Passwort muss ein alphanumerisches Zeichen enthalten - - Ihr Passwort muss eine Ziffer enthalten + + Ihr Passwort muss mindestens {0} Zeichen lang sein - - Ihr Passwort muss mindestens einen Großbuchstaben enthalten. + + Ihr Passwort darf nicht länger als {0} Zeichen sein. - - Ihr Passwort muss mindestens einen Kleinbuchstaben enthalten. + + Ihr Passwort darf nicht leer sein \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.en.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.en.resx index c076dd9c4..8a50bf4b2 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.en.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.en.resx @@ -1,143 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Your password cannot be empty + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + +Your password must contain at least one uppercase letter. + - - Your password must not exceed {0} characters. + + Your password must contain at least one lowercase letter. - - Your password must be at least {0} characters long + + Your password must contain a digit. - - Your password must contain an alphanumeric character + + Your password must contain an alphanumeric character - - Your password must contain a digit. + + Your password must be at least {0} characters long - - -Your password must contain at least one uppercase letter. - + + Your password must not exceed {0} characters. - - Your password must contain at least one lowercase letter. + + Your password cannot be empty \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.es-ES.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.es-ES.resx index 4b9f2510c..ddcb24abe 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.es-ES.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.es-ES.resx @@ -1,142 +1,148 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Tu contraseña no puede estar vacía + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Su contraseña debe contener al menos una letra mayúscula. - - Su contraseña no debe exceder los {0} caracteres. + + Su contraseña debe contener al menos una letra minúscula. - - -Su contraseña debe tener al menos {0} caracteres + + Su contraseña debe contener un dígito. - - Su contraseña debe contener un carácter alfanumérico + + Su contraseña debe contener un carácter alfanumérico - - Su contraseña debe contener un dígito. + + +Su contraseña debe tener al menos {0} caracteres - - Su contraseña debe contener al menos una letra mayúscula. + + Su contraseña no debe exceder los {0} caracteres. - - Su contraseña debe contener al menos una letra minúscula. + + Tu contraseña no puede estar vacía \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.fr-FR.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.fr-FR.resx index a8e199484..0716251cc 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.fr-FR.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.fr-FR.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Votre mot de passe ne peut pas être vide + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Votre mot de passe doit contenir au moins une lettre majuscule. - - Votre mot de passe ne doit pas dépasser {0} caractères. + + Votre mot de passe doit contenir au moins une lettre minuscule. - - Votre mot de passe doit comporter au moins {0} caractères + + Votre mot de passe doit contenir un chiffre. - - Votre mot de passe doit contenir un caractère alphanumérique + + Votre mot de passe doit contenir un caractère alphanumérique - - Votre mot de passe doit contenir un chiffre. + + Votre mot de passe doit comporter au moins {0} caractères - - Votre mot de passe doit contenir au moins une lettre majuscule. + + Votre mot de passe ne doit pas dépasser {0} caractères. - - Votre mot de passe doit contenir au moins une lettre minuscule. + + Votre mot de passe ne peut pas être vide \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ja-JP.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ja-JP.resx index 403a62a14..93dbf64bf 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ja-JP.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ja-JP.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - パスワードを空にすることはできません + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + パスワードには少なくとも 1 つの大文字が含まれている必要があります。 - - Your password must not exceed {0} characters. + + パスワードには少なくとも 1 つの小文字が含まれている必要があります。 - - パスワードは6文字以上である必要があります + + パスワードには数字が含まれている必要があります。 - - パスワードには英数字が含まれている必要があります + + パスワードには英数字が含まれている必要があります - - パスワードには数字が含まれている必要があります。 + + パスワードは6文字以上である必要があります - - パスワードには少なくとも 1 つの大文字が含まれている必要があります。 + + Your password must not exceed {0} characters. - - パスワードには少なくとも 1 つの小文字が含まれている必要があります。 + + パスワードを空にすることはできません \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.km-KH.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.km-KH.resx index 45387861a..1b6994494 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.km-KH.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.km-KH.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ពាក្យសម្ងាត់របស់អ្នកមិនអាចទទេបានទេ។ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + ពាក្យសម្ងាត់របស់អ្នកត្រូវតែមានយ៉ាងហោចណាស់អក្សរធំមួយ។ - - ពាក្យសម្ងាត់របស់អ្នកមិនត្រូវលើសពី {0} តួអក្សរទេ។ + + ពាក្យសម្ងាត់របស់អ្នកត្រូវតែមានយ៉ាងហោចណាស់អក្សរតូចមួយ។ - - ពាក្យសម្ងាត់របស់អ្នកត្រូវតែមានយ៉ាងហោចណាស់ {0} តួអក្សរ + + ពាក្យសម្ងាត់របស់អ្នកត្រូវតែមានលេខ។ - - ពាក្យសម្ងាត់របស់អ្នកត្រូវតែមានតួអក្សរអក្សរក្រមលេខ + + ពាក្យសម្ងាត់របស់អ្នកត្រូវតែមានតួអក្សរអក្សរក្រមលេខ - - ពាក្យសម្ងាត់របស់អ្នកត្រូវតែមានលេខ។ + + ពាក្យសម្ងាត់របស់អ្នកត្រូវតែមានយ៉ាងហោចណាស់ {0} តួអក្សរ - - ពាក្យសម្ងាត់របស់អ្នកត្រូវតែមានយ៉ាងហោចណាស់អក្សរធំមួយ។ + + ពាក្យសម្ងាត់របស់អ្នកមិនត្រូវលើសពី {0} តួអក្សរទេ។ - - ពាក្យសម្ងាត់របស់អ្នកត្រូវតែមានយ៉ាងហោចណាស់អក្សរតូចមួយ។ + + ពាក្យសម្ងាត់របស់អ្នកមិនអាចទទេបានទេ។ \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.resx index 32a31d35b..bbb1b3371 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.resx @@ -1,143 +1,168 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Your password cannot be empty + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Your password must contain at least one uppercase letter. + + + Your password must contain at least one number. + + + Your password must contain at least one lowercase letter. + + + Your password must contain at least one (@!? *.). + + + Your password length must not exceed 16. + + + Your password length must be at least 6. + + + Your password cannot be empty + + + Your password must contain at least one uppercase letter. - - Your password must be at least {0} characters long + + Your password must contain at least one lowercase letter. - - Your password must not exceed {0} characters. + + Your password must contain a digit. - + MustContainAlphanumericCharacter - - Your password must contain at least one lowercase letter. + + Your password must be at least {0} characters long - - Your password must contain a digit. + + Your password must not exceed {0} characters. - - -Your password must contain at least one uppercase letter. - + + Your password cannot be empty \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ru.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ru.resx index ecc0d7a32..7a06c6dbb 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ru.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ru.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Ваш пароль не может быть пустым + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Ваш пароль должен содержать хотя бы одну заглавную букву. - - Ваш пароль не должен превышать {0} символов. + + Ваш пароль должен содержать хотя бы одну строчную букву. - - Ваш пароль должен содержать не менее {0} символов. + + Ваш пароль должен содержать цифру. - - Ваш пароль должен содержать буквенно-цифровой символ + + Ваш пароль должен содержать буквенно-цифровой символ - - Ваш пароль должен содержать цифру. + + Ваш пароль должен содержать не менее {0} символов. - - Ваш пароль должен содержать хотя бы одну заглавную букву. + + Ваш пароль не должен превышать {0} символов. - - Ваш пароль должен содержать хотя бы одну строчную букву. + + Ваш пароль не может быть пустым \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.zh-CN.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.zh-CN.resx index 39e254387..8ee3be781 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.zh-CN.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.zh-CN.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 您的密码不能是空的 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + 您的密码必须至少包含一个大写字母。 - - 您的密码长度必须至少为6。 + + 您的密码必须至少包含一个数字。 - - 您的密码长度不能超过16。 + + 您的密码必须至少包含一个小写字母。 - + 您的密码必须至少包含一个(@! ? *.)。 - - 您的密码必须至少包含一个小写字母。 + + 您的密码长度不能超过16。 - - 您的密码必须至少包含一个数字。 + + 您的密码长度必须至少为6。 - - 您的密码必须至少包含一个大写字母。 + + 您的密码不能是空的 \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ca-ES.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ca-ES.resx index 36e0c396a..b8daf1ab5 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ca-ES.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ca-ES.resx @@ -1,138 +1,144 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Traces d'auditoria - - - Data i hora + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Nom de la taula - - Nous valors + + Clau principal - + Valors antics - - Clau principal + + Nous valors - - Nom de la taula + + Data i hora + + + Traces d'auditoria \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.de-DE.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.de-DE.resx index 2b12c9d4b..da4dc2f58 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.de-DE.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.de-DE.resx @@ -1,138 +1,144 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Buchungsprotokolle - - - Terminzeit + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Tabellenname - - Neue Werte + + Primärschlüssel - + Alte Werte - - Primärschlüssel + + Neue Werte - - Tabellenname + + Terminzeit + + + Buchungsprotokolle \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.en.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.en.resx index d5f7260c6..9e59474ee 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.en.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.en.resx @@ -1,138 +1,144 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - AuditTrails - - - Date Time + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Table Name - - New Values + + Primary Key - + Old Values - - Primary Key + + New Values - - Table Name + + Date Time + + + AuditTrails \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.es-ES.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.es-ES.resx index 309554121..fea68d0fa 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.es-ES.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.es-ES.resx @@ -1,138 +1,144 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - AuditTrails - - - Fecha y hora + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Nombre de la tabla - - Nuevos valores + + Clave principal - + Valores antiguos - - Clave principal + + Nuevos valores - - Nombre de la tabla + + Fecha y hora + + + AuditTrails \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.fr-FR.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.fr-FR.resx index 9fb99835f..ba7c0dc3f 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.fr-FR.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.fr-FR.resx @@ -1,138 +1,144 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - AuditTrails - - - Date Heure + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Nom de la table - - Nouvelles valeurs + + Clé primaire - + Anciennes valeurs - - Clé primaire + + Nouvelles valeurs - - Nom de la table + + Date Heure + + + AuditTrails \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ja-JP.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ja-JP.resx index 9965bed54..eb6200d05 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ja-JP.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ja-JP.resx @@ -1,138 +1,144 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 監査証跡 - - - 日付時刻 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + テーブル名 - - 新しい値 + + 主キー - + 古い値 - - 主キー + + 新しい値 - - テーブル名 + + 日付時刻 + + + 監査証跡 \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.km-KH.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.km-KH.resx index 92c03e22d..08102ae72 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.km-KH.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.km-KH.resx @@ -1,138 +1,144 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - សវនកម្មTrails - - - ពេលវេលា កាលបរិច្ឆេទ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + ឈ្មោះ តារាង - - តម្លៃថ្មី + + គន្លឹះបឋម - + តម្លៃចាស់ - - គន្លឹះបឋម + + តម្លៃថ្មី - - ឈ្មោះ តារាង + + ពេលវេលា កាលបរិច្ឆេទ + + + សវនកម្មTrails \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.resx index d5f7260c6..9e59474ee 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.resx @@ -1,138 +1,144 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - AuditTrails - - - Date Time + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Table Name - - New Values + + Primary Key - + Old Values - - Primary Key + + New Values - - Table Name + + Date Time + + + AuditTrails \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ru.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ru.resx index 3d18b495c..8bcb82665 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ru.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ru.resx @@ -1,138 +1,144 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - AuditTrails - - - Дата Время + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Имя таблицы - - Новые ценности + + Основной ключ - + Старые ценности - - Основной ключ + + Новые ценности - - Имя таблицы + + Дата Время + + + AuditTrails \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.zh-CN.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.zh-CN.resx index 14ce030f7..ca01866d2 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.zh-CN.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.zh-CN.resx @@ -1,138 +1,144 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 审计跟踪 - - - 记录时间 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + 表名 - - 新值 + + 主键 - + 旧值 - - 主键 + + 新值 - - 表名 + + 记录时间 + + + 审计跟踪 \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ca-ES.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ca-ES.resx index d421324e1..cf6d2b539 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ca-ES.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ca-ES.resx @@ -1,129 +1,135 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Descripció + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Nom - + Tipus de document - - Nom + + Descripció \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.de-DE.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.de-DE.resx index 3dc904f31..0dbec911b 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.de-DE.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.de-DE.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Beschreibung + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Name - + Dokumenttypen - - Name + + Beschreibung \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.en.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.en.resx index 1d8c34611..c2ab7dbb2 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.en.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.en.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Description + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Name - + DocumentTypes - - Name + + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.es-ES.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.es-ES.resx index d77601dfb..f686236cd 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.es-ES.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.es-ES.resx @@ -1,129 +1,135 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Descripción + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Nombre - + Tipos de documento - - Nombre + + Descripción \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.fr-FR.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.fr-FR.resx index 374125436..1c13bcb41 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.fr-FR.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.fr-FR.resx @@ -1,129 +1,135 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Description + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Nom - + Types de documents - - Nom + + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ja-JP.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ja-JP.resx index 637145a8e..acbecff26 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ja-JP.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ja-JP.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 形容 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + 名前 - + ドキュメントタイプ - - 名前 + + 形容 \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.km-KH.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.km-KH.resx index ba2799e99..8081c40c7 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.km-KH.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.km-KH.resx @@ -1,129 +1,135 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 설명 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + ឈ្មោះ - + ៥. កំណត់ហេតុឯកសារ - - ឈ្មោះ + + 설명 \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.resx index 1d8c34611..c2ab7dbb2 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Description + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Name - + DocumentTypes - - Name + + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ru.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ru.resx index d8a5dc84d..e9ef7aa64 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ru.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ru.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Описание + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Имя - + Типы документов - - Имя + + Описание \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.zh-CN.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.zh-CN.resx index adb51fbe3..0126885ca 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.zh-CN.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.zh-CN.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 描述 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + 名称 - + 文档类型 - - 名称 + + 描述 \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ca-ES.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ca-ES.resx index d421324e1..cf6d2b539 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ca-ES.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ca-ES.resx @@ -1,129 +1,135 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Descripció + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Nom - + Tipus de document - - Nom + + Descripció \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.de-DE.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.de-DE.resx index 3dc904f31..0dbec911b 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.de-DE.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.de-DE.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Beschreibung + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Name - + Dokumenttypen - - Name + + Beschreibung \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.en.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.en.resx index 1d8c34611..c2ab7dbb2 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.en.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.en.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Description + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Name - + DocumentTypes - - Name + + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.es-ES.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.es-ES.resx index d77601dfb..f686236cd 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.es-ES.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.es-ES.resx @@ -1,129 +1,135 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Descripción + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Nombre - + Tipos de documento - - Nombre + + Descripción \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.fr-FR.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.fr-FR.resx index 374125436..1c13bcb41 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.fr-FR.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.fr-FR.resx @@ -1,129 +1,135 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Description + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Nom - + Types de documents - - Nom + + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ja-JP.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ja-JP.resx index 637145a8e..acbecff26 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ja-JP.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ja-JP.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 形容 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + 名前 - + ドキュメントタイプ - - 名前 + + 形容 \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.km-KH.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.km-KH.resx index ba2799e99..8081c40c7 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.km-KH.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.km-KH.resx @@ -1,129 +1,135 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 설명 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + ឈ្មោះ - + ៥. កំណត់ហេតុឯកសារ - - ឈ្មោះ + + 설명 \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.resx index 1d8c34611..c2ab7dbb2 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Description + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Name - + DocumentTypes - - Name + + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ru.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ru.resx index d8a5dc84d..e9ef7aa64 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ru.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ru.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Описание + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Имя - + Типы документов - - Имя + + Описание \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.zh-CN.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.zh-CN.resx index adb51fbe3..0126885ca 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.zh-CN.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.zh-CN.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 描述 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + 名称 - + 文档类型 - - 名称 + + 描述 \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ca-ES.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ca-ES.resx index 6c2c8363e..e105253c2 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ca-ES.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ca-ES.resx @@ -1,135 +1,141 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Creat per + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + URL - - Descripció + + Títol - + Documents - - Títol + + Descripció - - URL + + Creat per \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.de-DE.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.de-DE.resx index 4b75ffd02..8cfbc28f3 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.de-DE.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.de-DE.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Erstellt von + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + URL (URL) - - Beschreibung + + Titel - + Urkunden - - Titel + + Beschreibung - - URL (URL) + + Erstellt von \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.en.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.en.resx index 2b1cfe7fa..8bead2f04 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.en.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.en.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Created By + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + URL - - Description + + Title - + Documents - - Title + + Description - - URL + + Created By \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.es-ES.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.es-ES.resx index 2920ea9b6..0baa2427c 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.es-ES.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.es-ES.resx @@ -1,135 +1,141 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Creado por + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + URL - - Descripción + + Título - + Documentos - - Título + + Descripción - - URL + + Creado por \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.fr-FR.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.fr-FR.resx index 235f57a91..f104cfab3 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.fr-FR.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.fr-FR.resx @@ -1,135 +1,141 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Créé par + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + URL - - Description + + Titre - + Documents - - Titre + + Description - - URL + + Créé par \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ja-JP.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ja-JP.resx index c542a90b7..3da5a0016 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ja-JP.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ja-JP.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 作成者 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + URL - - 形容 + + タイトル - + 書類 - - タイトル + + 形容 - - URL + + 作成者 \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.km-KH.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.km-KH.resx index 84f253947..7468129a6 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.km-KH.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.km-KH.resx @@ -1,135 +1,141 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - បង្កើតដោយ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + URL - - 설명 + + ចំណងជើង - + ឯកសារ - - ចំណងជើង + + 설명 - - URL + + បង្កើតដោយ \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.resx index 2b1cfe7fa..8bead2f04 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Created By + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + URL - - Description + + Title - + Documents - - Title + + Description - - URL + + Created By \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ru.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ru.resx index 71db76884..297363f35 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ru.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ru.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Создание сайта + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + URL-адрес - - Описание + + Титул - + Документы - - Титул + + Описание - - URL-адрес + + Создание сайта \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.zh-CN.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.zh-CN.resx index 10b557537..0ac0bdcaa 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.zh-CN.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.zh-CN.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 创建人 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + URL - - 描述 + + 标题 - + 文档信息 - - 标题 + + 描述 - - URL + + 创建人 \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ar-IQ.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ar-IQ.resx deleted file mode 100644 index dd2b1c958..000000000 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ar-IQ.resx +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - لم يتم العثور على أي مستخدم عن طريق البريد الإلكتروني ، يرجى الاتصال بالمسؤول - - - التحقق من البريد الإلكتروني المخصص للطوارئ - - - {0{، يرجى الاتصال بالمسؤول - - \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ca-ES.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ca-ES.resx index d40a60f32..b7cdf7ef4 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ca-ES.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ca-ES.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - No s'ha trobat cap usuari per aquest correu electrònic, possis en contacte amb l'administrador - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Verifiqui el seu correu electrònic de recuperació - + + No s'ha trobat cap usuari per aquest correu electrònic, possis en contacte amb l'administrador + + {0}, per favor, possis en contacte amb l'administrador \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.de-DE.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.de-DE.resx index dc114cd76..9d144e0cb 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.de-DE.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.de-DE.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Kein Benutzer per E-Mail gefunden, bitte kontaktieren Sie den Administrator - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Überprüfen Sie Ihre Wiederherstellungs-E-Mail - + + Kein Benutzer per E-Mail gefunden, bitte kontaktieren Sie den Administrator + + {0}, bitte kontaktieren Sie den Administrator \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.en.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.en.resx index 95dbf799a..4cd332396 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.en.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.en.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - No user found by email, please contact an administrator - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Verify your recovery email - + + No user found by email, please contact an administrator + + {0}, please contact an administrator \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.es-ES.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.es-ES.resx index 4ba8aaccb..36774db59 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.es-ES.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.es-ES.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - No se ha encontrado ningún usuario por correo electrónico, póngase en contacto con el administrador - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Verifique su correo electrónico de recuperación - + + No se ha encontrado ningún usuario por correo electrónico, póngase en contacto con el administrador + + {0}, por favor, póngase en contacto con el administrador \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.fr-FR.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.fr-FR.resx index ddcd11c14..f106bd04c 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.fr-FR.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.fr-FR.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Aucun utilisateur trouvé par email, veuillez contacter l'administrateur. - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Vérifiez l'e-mail de récupération - + + Aucun utilisateur trouvé par email, veuillez contacter l'administrateur. + + {0}, veuillez contacter l'administrateur \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ja-JP.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ja-JP.resx index 41739e30e..d21202f6d 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ja-JP.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ja-JP.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - メールに記載されたユーザーが見つかりません。管理者にお問い合わせください。 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + リカバリーメールを確認する - + + メールに記載されたユーザーが見つかりません。管理者にお問い合わせください。 + + {0}, 管理者に連絡してください。 \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.km-KH.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.km-KH.resx index 171656c2f..8b08aaddb 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.km-KH.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.km-KH.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - គ្មាន អ្នក ប្រើ រក ឃើញ តាម អ៊ីមែល ទេ សូម ទាក់ទង ទៅ អ្នក គ្រប់គ្រង - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + ផ្ទៀងផ្ទាត់អ៊ីមែល recovery របស់អ្នក - + + គ្មាន អ្នក ប្រើ រក ឃើញ តាម អ៊ីមែល ទេ សូម ទាក់ទង ទៅ អ្នក គ្រប់គ្រង + + {0} សូមទាក់ទងទៅអ្នកគ្រប់គ្រង \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.resx index 95dbf799a..4cd332396 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - No user found by email, please contact an administrator - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Verify your recovery email - + + No user found by email, please contact an administrator + + {0}, please contact an administrator \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ru.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ru.resx index 6338bfcf6..6210e97fa 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ru.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ru.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Пользователь не найден по электронной почте, обратитесь к администратору - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Проверьте письмо о восстановлении - + + Пользователь не найден по электронной почте, обратитесь к администратору + + {0}, пожалуйста, свяжитесь с администратором \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.zh-CN.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.zh-CN.resx index dc8a2c3f6..9b8bf1b8d 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.zh-CN.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.zh-CN.resx @@ -1,129 +1,135 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 通过电子邮件没有找到用户,请联系管理员 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 验证您的恢复邮件 - + + 通过电子邮件没有找到用户,请联系管理员 + + {0},请联系管理员 \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ca-ES.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ca-ES.resx index 937d718f3..0b475a553 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ca-ES.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ca-ES.resx @@ -1,135 +1,141 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Descripció + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Valor - - ClauValors + + Texte - + Nom - - Texte + + ClauValors - - Valor + + Descripció \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.de-DE.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.de-DE.resx index eb67f03b3..193e2bece 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.de-DE.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.de-DE.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Beschreibung + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Wert - - KeyValues + + Text - + Name - - Text + + KeyValues - - Wert + + Beschreibung \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.en.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.en.resx index 7b6ae3ec6..d90ed6706 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.en.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.en.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Description + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Value - - KeyValues + + Text - + Name - - Text + + KeyValues - - Value + + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.es-ES.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.es-ES.resx index fda8b4000..262a7f793 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.es-ES.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.es-ES.resx @@ -1,135 +1,141 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Descripción + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Valor - - KeyValues + + Mensaje de texto - + Nombre - - Mensaje de texto + + KeyValues - - Valor + + Descripción \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.fr-FR.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.fr-FR.resx index 60bf5c7ae..940988fff 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.fr-FR.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.fr-FR.resx @@ -1,135 +1,141 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Description + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Valeur - - KeyValues + + SMS - + Nom - - SMS + + KeyValues - - Valeur + + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ja-JP.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ja-JP.resx index 04ec6c4b9..da74a2eb8 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ja-JP.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ja-JP.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 形容 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + 価値 - - キーバリュー + + テキスト - + 名前 - - テキスト + + キーバリュー - - 価値 + + 形容 \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.km-KH.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.km-KH.resx index aeaf07de9..a93ea5131 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.km-KH.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.km-KH.resx @@ -1,135 +1,141 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 설명 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + តម្លៃ - - KeyValues + + អត្ថបទ - + ឈ្មោះ - - អត្ថបទ + + KeyValues - - តម្លៃ + + 설명 \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.resx index 7b6ae3ec6..d90ed6706 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Description + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Value - - KeyValues + + Text - + Name - - Text + + KeyValues - - Value + + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ru.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ru.resx index 4bebce771..d74053e66 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ru.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ru.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Описание + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Ценность - - Ключевыезначности + + СМС - + Имя - - СМС + + Ключевыезначности - - Ценность + + Описание \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.zh-CN.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.zh-CN.resx index 7e51aba01..e232d2e20 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.zh-CN.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.zh-CN.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 描述 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + - - 字典 + + 文本 - + 名称 - - 文本 + + 字典 - - + + 描述 \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ca-ES.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ca-ES.resx index 937d718f3..0b475a553 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ca-ES.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ca-ES.resx @@ -1,135 +1,141 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Descripció + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Valor - - ClauValors + + Texte - + Nom - - Texte + + ClauValors - - Valor + + Descripció \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.de-DE.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.de-DE.resx index eb67f03b3..193e2bece 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.de-DE.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.de-DE.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Beschreibung + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Wert - - KeyValues + + Text - + Name - - Text + + KeyValues - - Wert + + Beschreibung \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.en.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.en.resx index 7b6ae3ec6..d90ed6706 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.en.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.en.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Description + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Value - - KeyValues + + Text - + Name - - Text + + KeyValues - - Value + + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.es-ES.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.es-ES.resx index fda8b4000..262a7f793 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.es-ES.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.es-ES.resx @@ -1,135 +1,141 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Descripción + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Valor - - KeyValues + + Mensaje de texto - + Nombre - - Mensaje de texto + + KeyValues - - Valor + + Descripción \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.fr-FR.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.fr-FR.resx index 60bf5c7ae..940988fff 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.fr-FR.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.fr-FR.resx @@ -1,135 +1,141 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Description + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Valeur - - KeyValues + + SMS - + Nom - - SMS + + KeyValues - - Valeur + + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ja-JP.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ja-JP.resx index 04ec6c4b9..da74a2eb8 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ja-JP.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ja-JP.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 形容 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + 価値 - - キーバリュー + + テキスト - + 名前 - - テキスト + + キーバリュー - - 価値 + + 形容 \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.km-KH.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.km-KH.resx index aeaf07de9..a93ea5131 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.km-KH.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.km-KH.resx @@ -1,135 +1,141 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 설명 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + តម្លៃ - - KeyValues + + អត្ថបទ - + ឈ្មោះ - - អត្ថបទ + + KeyValues - - តម្លៃ + + 설명 \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.resx index 7b6ae3ec6..d90ed6706 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Description + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Value - - KeyValues + + Text - + Name - - Text + + KeyValues - - Value + + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ru.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ru.resx index 4bebce771..d74053e66 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ru.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ru.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Описание + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Ценность - - Ключевыезначности + + СМС - + Имя - - СМС + + Ключевыезначности - - Ценность + + Описание \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.zh-CN.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.zh-CN.resx index 7e51aba01..e232d2e20 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.zh-CN.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.zh-CN.resx @@ -1,135 +1,141 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 描述 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + - - 字典 + + 文本 - + 名称 - - 文本 + + 字典 - - + + 描述 \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ca-ES.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ca-ES.resx index a7529df64..09a6557e4 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ca-ES.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ca-ES.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Excepció - - - Nivell + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Nom d'usuari - - Registres + + Segells de temps - - Missatge + + Propietats - + Plantilla de missatges - - Propietats + + Missatge - - Segells de temps + + Registres - - Nom d'usuari + + Nivell + + + Excepció \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.de-DE.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.de-DE.resx index d50f2a0a3..3f6943036 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.de-DE.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.de-DE.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Ausnahme - - - Ebene + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Name des Benutzers - - Protokolle + + Zeitstempel - - Meldung + + Eigenschaften - + Vorlage der Nachricht - - Eigenschaften + + Meldung - - Zeitstempel + + Protokolle - - Name des Benutzers + + Ebene + + + Ausnahme \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.en.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.en.resx index 97e1ba56f..98c01688e 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.en.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.en.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Exception - - - Level + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + User Name - - Logs + + Time Stamp - - Message + + Properties - + Message Template - - Properties + + Message - - Time Stamp + + Logs - - User Name + + Level + + + Exception \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.es-ES.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.es-ES.resx index 1429c5905..3814b69af 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.es-ES.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.es-ES.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Excepción - - - Nivel + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Nombre de usuario - - Registros + + Sello de tiempo - - Mensaje + + Propiedades - + Plantilla de mensajes - - Propiedades + + Mensaje - - Sello de tiempo + + Registros - - Nombre de usuario + + Nivel + + + Excepción \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.fr-FR.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.fr-FR.resx index 339587459..2c5454cd0 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.fr-FR.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.fr-FR.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Exception - - - Niveau + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Nom d'utilisateur - - Journaux + + Horodatage - - Message + + Propriétés - + Modèle de message - - Propriétés + + Message - - Horodatage + + Journaux - - Nom d'utilisateur + + Niveau + + + Exception \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ja-JP.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ja-JP.resx index 226c2a987..7c90fd1ee 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ja-JP.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ja-JP.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 例外 - - - レベル + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + ユーザー名 - - ログ + + タイムスタンプ - - メッセージ + + 特性 - + メッセージテンプレート - - 特性 + + メッセージ - - タイムスタンプ + + ログ - - ユーザー名 + + レベル + + + 例外 \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.km-KH.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.km-KH.resx index 5110d1cfb..c5fae0439 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.km-KH.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.km-KH.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 예외 - - - 수준 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + 사용자 이름 - - 로그 + + 타임 스탬프 - - 메시지 + + 속성 - + 메시지 템플릿 - - 속성 + + 메시지 - - 타임 스탬프 + + 로그 - - 사용자 이름 + + 수준 + + + 예외 \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.resx index 4c00f19d1..5cce74b21 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.resx @@ -1,144 +1,150 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Exception - - - Level + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + User Name - - Logs + + Time Stamp - - Message + + Properties - + Message Template - - Properties + + Message - - Time Stamp + + Logs - - User Name + + Level + + + Exception \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ru.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ru.resx index eee812e53..cf3009460 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ru.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ru.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Исключение - - - Уровень + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Имя пользователя - - Журналы + + Штамп времени - - Сообщение + + Свойства - + Шаблон сообщения - - Свойства + + Сообщение - - Штамп времени + + Журналы - - Имя пользователя + + Уровень + + + Исключение \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.zh-CN.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.zh-CN.resx index 797ac156d..c1b488474 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.zh-CN.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.zh-CN.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 异常情况 - - - 级别 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + 用户名称 - - 日志 + + 时间戳 - - 信息 + + 属性 - + 信息模板 - - 属性 + + 信息 - - 时间戳 + + 日志 - - 用户名称 + + 级别 + + + 异常情况 \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ca-ES.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ca-ES.resx index 38e97064e..17a9c9dde 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ca-ES.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ca-ES.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Nom de la marca + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Unitat - - Descripció + + Productes - - Imatges + + Nom del producte - + Preu de l'unitat - - Nom del producte + + Imatges - - Productes + + Descripció - - Unitat + + Nom de la marca \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.de-DE.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.de-DE.resx index 98d4710e5..068037723 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.de-DE.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.de-DE.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Markenname + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Einheit - - Beschreibung + + Produkte - - Bilder + + Produktname - + Preis der Einheit - - Produktname + + Bilder - - Produkte + + Beschreibung - - Einheit + + Markenname \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.en.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.en.resx index 5f9742617..c98369be0 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.en.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.en.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Brand Name + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Unit - - Description + + Products - - Pictures + + Product Name - + Price of unit - - Product Name + + Pictures - - Products + + Description - - Unit + + Brand Name \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.es-ES.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.es-ES.resx index 855d67784..4a07b80d8 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.es-ES.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.es-ES.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Nombre de la marca + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Unidad - - Descripción + + Productos - - Imágenes + + Nombre del producto - + Precio de la unidad - - Nombre del producto + + Imágenes - - Productos + + Descripción - - Unidad + + Nombre de la marca \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.fr-FR.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.fr-FR.resx index 000fc1e06..01eadfd90 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.fr-FR.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.fr-FR.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Nom de la marque + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Unité - - Description + + Produits - - Images + + Nom du produit - + Prix de l'unité - - Nom du produit + + Images - - Produits + + Description - - Unité + + Nom de la marque \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ja-JP.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ja-JP.resx index 6287ea44c..ea87fcc29 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ja-JP.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ja-JP.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ブランド名 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + 単位 - - 商品説明 + + 製品名 - - 画像 + + 商品名 - + 本体価格 - - 商品名 + + 画像 - - 製品名 + + 商品説明 - - 単位 + + ブランド名 \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.km-KH.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.km-KH.resx index e16c07519..2c5109be0 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.km-KH.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.km-KH.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 상표명 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + 단위 - - 설명 + + 제품 - - 영화 + + 상품명 - + 단가 - - 상품명 + + 영화 - - 제품 + + 설명 - - 단위 + + 상표명 \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.resx index b87848d39..b40b38e5d 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.resx @@ -1,141 +1,147 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Brand Name + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Unit - - Description + + Products - - Pictures + + Product Name - + Price of unit - - Product Name + + Pictures - - Products + + Description - - Unit + + Brand Name \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ru.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ru.resx index 6fb642de7..7fb972ccd 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ru.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ru.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Название бренда + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Единица - - Описание + + Продукция - - Изображения + + Название продукта - + Цена единицы - - Название продукта + + Изображения - - Продукция + + Описание - - Единица + + Название бренда \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.zh-CN.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.zh-CN.resx index 8cd44281f..bb1bfe68a 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.zh-CN.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.zh-CN.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 品牌名称 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + 单位 - - 描述 + + 产品 - - 图片 + + 产品名称 - + 单位价格 - - 产品名称 + + 图片 - - 产品 + + 描述 - - 单位 + + 品牌名称 \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ca-ES.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ca-ES.resx index 38e97064e..17a9c9dde 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ca-ES.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ca-ES.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Nom de la marca + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Unitat - - Descripció + + Productes - - Imatges + + Nom del producte - + Preu de l'unitat - - Nom del producte + + Imatges - - Productes + + Descripció - - Unitat + + Nom de la marca \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.de-DE.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.de-DE.resx index 98d4710e5..068037723 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.de-DE.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.de-DE.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Markenname + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Einheit - - Beschreibung + + Produkte - - Bilder + + Produktname - + Preis der Einheit - - Produktname + + Bilder - - Produkte + + Beschreibung - - Einheit + + Markenname \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.en.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.en.resx index 5f9742617..c98369be0 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.en.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.en.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Brand Name + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Unit - - Description + + Products - - Pictures + + Product Name - + Price of unit - - Product Name + + Pictures - - Products + + Description - - Unit + + Brand Name \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.es-ES.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.es-ES.resx index 855d67784..4a07b80d8 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.es-ES.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.es-ES.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Nombre de la marca + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Unidad - - Descripción + + Productos - - Imágenes + + Nombre del producto - + Precio de la unidad - - Nombre del producto + + Imágenes - - Productos + + Descripción - - Unidad + + Nombre de la marca \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.fr-FR.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.fr-FR.resx index 000fc1e06..01eadfd90 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.fr-FR.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.fr-FR.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Nom de la marque + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Unité - - Description + + Produits - - Images + + Nom du produit - + Prix de l'unité - - Nom du produit + + Images - - Produits + + Description - - Unité + + Nom de la marque \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ja-JP.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ja-JP.resx index 6287ea44c..ea87fcc29 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ja-JP.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ja-JP.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ブランド名 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + 単位 - - 商品説明 + + 製品名 - - 画像 + + 商品名 - + 本体価格 - - 商品名 + + 画像 - - 製品名 + + 商品説明 - - 単位 + + ブランド名 \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.km-KH.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.km-KH.resx index e16c07519..2c5109be0 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.km-KH.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.km-KH.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 상표명 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + 단위 - - 설명 + + 제품 - - 영화 + + 상품명 - + 단가 - - 상품명 + + 영화 - - 제품 + + 설명 - - 단위 + + 상표명 \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.resx index b87848d39..b40b38e5d 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.resx @@ -1,141 +1,147 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Brand Name + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Unit - - Description + + Products - - Pictures + + Product Name - + Price of unit - - Product Name + + Pictures - - Products + + Description - - Unit + + Brand Name \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ru.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ru.resx index 6fb642de7..7fb972ccd 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ru.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ru.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Название бренда + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Единица - - Описание + + Продукция - - Изображения + + Название продукта - + Цена единицы - - Название продукта + + Изображения - - Продукция + + Описание - - Единица + + Название бренда \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.zh-CN.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.zh-CN.resx index 8cd44281f..bb1bfe68a 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.zh-CN.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.zh-CN.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 品牌名称 + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + 单位 - - 描述 + + 产品 - - 图片 + + 产品名称 - + 单位价格 - - 产品名称 + + 图片 - - 产品 + + 描述 - - 单位 + + 品牌名称 \ No newline at end of file diff --git a/src/Application/_Imports.cs b/src/Application/_Imports.cs index 470a39ce0..e23c5eb78 100644 --- a/src/Application/_Imports.cs +++ b/src/Application/_Imports.cs @@ -25,4 +25,4 @@ global using Microsoft.Extensions.Caching.Memory; global using Microsoft.Extensions.Localization; global using Microsoft.Extensions.Logging; -global using Microsoft.Extensions.Primitives; +global using Microsoft.Extensions.Primitives; \ No newline at end of file diff --git a/src/Domain/Common/DomainEvent.cs b/src/Domain/Common/DomainEvent.cs index d2c4ee263..d063faf77 100644 --- a/src/Domain/Common/DomainEvent.cs +++ b/src/Domain/Common/DomainEvent.cs @@ -5,12 +5,13 @@ namespace CleanArchitecture.Blazor.Domain.Common; -public abstract class DomainEvent: INotification +public abstract class DomainEvent : INotification { protected DomainEvent() { DateOccurred = DateTimeOffset.UtcNow; } + public bool IsPublished { get; set; } public DateTimeOffset DateOccurred { get; protected set; } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Entities/BaseAuditableEntity.cs b/src/Domain/Common/Entities/BaseAuditableEntity.cs index 38c7acc0e..a8d5a357c 100644 --- a/src/Domain/Common/Entities/BaseAuditableEntity.cs +++ b/src/Domain/Common/Entities/BaseAuditableEntity.cs @@ -12,4 +12,4 @@ public abstract class BaseAuditableEntity : BaseEntity public virtual DateTime? LastModified { get; set; } public virtual string? LastModifiedBy { get; set; } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Entities/BaseAuditableSoftDeleteEntity.cs b/src/Domain/Common/Entities/BaseAuditableSoftDeleteEntity.cs index 48ec742f9..573464c6a 100644 --- a/src/Domain/Common/Entities/BaseAuditableSoftDeleteEntity.cs +++ b/src/Domain/Common/Entities/BaseAuditableSoftDeleteEntity.cs @@ -7,5 +7,4 @@ public abstract class BaseAuditableSoftDeleteEntity : BaseAuditableEntity, ISoft { public DateTime? Deleted { get; set; } public string? DeletedBy { get; set; } - -} +} \ No newline at end of file diff --git a/src/Domain/Common/Entities/BaseEntity.cs b/src/Domain/Common/Entities/BaseEntity.cs index a25a99c78..d7bd946fb 100644 --- a/src/Domain/Common/Entities/BaseEntity.cs +++ b/src/Domain/Common/Entities/BaseEntity.cs @@ -7,11 +7,11 @@ namespace CleanArchitecture.Blazor.Domain.Common.Entities; public abstract class BaseEntity : IEntity { - public virtual int Id { get; set; } private readonly List _domainEvents = new(); - [NotMapped] - public IReadOnlyCollection DomainEvents => _domainEvents.AsReadOnly(); + [NotMapped] public IReadOnlyCollection DomainEvents => _domainEvents.AsReadOnly(); + + public virtual int Id { get; set; } public void AddDomainEvent(DomainEvent domainEvent) { @@ -27,4 +27,4 @@ public void ClearDomainEvents() { _domainEvents.Clear(); } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Entities/IAuditTrial.cs b/src/Domain/Common/Entities/IAuditTrial.cs index 2b4e61510..5fb41c3d1 100644 --- a/src/Domain/Common/Entities/IAuditTrial.cs +++ b/src/Domain/Common/Entities/IAuditTrial.cs @@ -5,4 +5,4 @@ namespace CleanArchitecture.Blazor.Domain.Common.Entities; public interface IAuditTrial { -} +} \ No newline at end of file diff --git a/src/Domain/Common/Entities/IEntity.cs b/src/Domain/Common/Entities/IEntity.cs index f1cfa8f63..c196404f5 100644 --- a/src/Domain/Common/Entities/IEntity.cs +++ b/src/Domain/Common/Entities/IEntity.cs @@ -5,9 +5,9 @@ namespace CleanArchitecture.Blazor.Domain.Common.Entities; public interface IEntity { - } + public interface IEntity : IEntity { T Id { get; set; } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Entities/IMustHaveTenant.cs b/src/Domain/Common/Entities/IMustHaveTenant.cs index 543f046e8..28b8cf8cc 100644 --- a/src/Domain/Common/Entities/IMustHaveTenant.cs +++ b/src/Domain/Common/Entities/IMustHaveTenant.cs @@ -1,9 +1,11 @@ namespace CleanArchitecture.Blazor.Domain.Common.Entities; + public interface IMustHaveTenant { string TenantId { get; set; } } + public interface IMayHaveTenant { string? TenantId { get; set; } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Entities/ISoftDelete.cs b/src/Domain/Common/Entities/ISoftDelete.cs index 327be9579..3220eb474 100644 --- a/src/Domain/Common/Entities/ISoftDelete.cs +++ b/src/Domain/Common/Entities/ISoftDelete.cs @@ -7,4 +7,4 @@ public interface ISoftDelete { DateTime? Deleted { get; set; } string? DeletedBy { get; set; } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Entities/OwnerPropertyEntity.cs b/src/Domain/Common/Entities/OwnerPropertyEntity.cs index 970a186bb..2681a81b8 100644 --- a/src/Domain/Common/Entities/OwnerPropertyEntity.cs +++ b/src/Domain/Common/Entities/OwnerPropertyEntity.cs @@ -8,8 +8,7 @@ namespace CleanArchitecture.Blazor.Domain.Common.Entities; public abstract class OwnerPropertyEntity : BaseAuditableEntity { - [ForeignKey("CreatedBy")] - public virtual ApplicationUser? Owner { get; set; } - [ForeignKey("LastModifiedBy")] - public virtual ApplicationUser? Editor { get; set; } -} + [ForeignKey("CreatedBy")] public virtual ApplicationUser? Owner { get; set; } + + [ForeignKey("LastModifiedBy")] public virtual ApplicationUser? Editor { get; set; } +} \ No newline at end of file diff --git a/src/Domain/Common/Enums/ExportType.cs b/src/Domain/Common/Enums/ExportType.cs index f4716d532..eee401b02 100644 --- a/src/Domain/Common/Enums/ExportType.cs +++ b/src/Domain/Common/Enums/ExportType.cs @@ -1,4 +1,5 @@ namespace CleanArchitecture.Blazor.Domain.Common.Enums; + public enum ExportType { Excel, diff --git a/src/Domain/Common/Enums/JobStatus.cs b/src/Domain/Common/Enums/JobStatus.cs index f5e07cc4d..dcda76b78 100644 --- a/src/Domain/Common/Enums/JobStatus.cs +++ b/src/Domain/Common/Enums/JobStatus.cs @@ -1,4 +1,5 @@ namespace CleanArchitecture.Blazor.Domain.Common.Enums; + public enum JobStatus { NotStart, @@ -6,4 +7,4 @@ public enum JobStatus Doing, Done, Pending -} +} \ No newline at end of file diff --git a/src/Domain/Common/Enums/PartnerType.cs b/src/Domain/Common/Enums/PartnerType.cs index bdd2f900a..398aee988 100644 --- a/src/Domain/Common/Enums/PartnerType.cs +++ b/src/Domain/Common/Enums/PartnerType.cs @@ -7,4 +7,4 @@ public enum PartnerType { TP, IC -} +} \ No newline at end of file diff --git a/src/Domain/Common/Enums/TrackingState.cs b/src/Domain/Common/Enums/TrackingState.cs index 6768b4949..1d59c12c1 100644 --- a/src/Domain/Common/Enums/TrackingState.cs +++ b/src/Domain/Common/Enums/TrackingState.cs @@ -7,10 +7,13 @@ public enum TrackingState { /// Existing entity that has not been modified. Unchanged, + /// Newly created entity. Added, + /// Existing entity that has been modified. Modified, + /// Existing entity that has been marked as deleted. Deleted -} +} \ No newline at end of file diff --git a/src/Domain/Common/Enums/UploadType.cs b/src/Domain/Common/Enums/UploadType.cs index 2580c01fa..5943a0a8b 100644 --- a/src/Domain/Common/Enums/UploadType.cs +++ b/src/Domain/Common/Enums/UploadType.cs @@ -7,10 +7,7 @@ namespace CleanArchitecture.Blazor.Domain.Common.Enums; public enum UploadType : byte { - [Description(@"Products")] - Product, - [Description(@"ProfilePictures")] - ProfilePicture, - [Description(@"Documents")] - Document -} + [Description(@"Products")] Product, + [Description(@"ProfilePictures")] ProfilePicture, + [Description(@"Documents")] Document +} \ No newline at end of file diff --git a/src/Domain/Common/Events/CreatedEvent.cs b/src/Domain/Common/Events/CreatedEvent.cs index 0308ad7c1..b49b60662 100644 --- a/src/Domain/Common/Events/CreatedEvent.cs +++ b/src/Domain/Common/Events/CreatedEvent.cs @@ -8,6 +8,7 @@ using CleanArchitecture.Blazor.Domain.Common.Entities; namespace CleanArchitecture.Blazor.Domain.Common.Events; + public class CreatedEvent : DomainEvent where T : IEntity { public CreatedEvent(T entity) @@ -16,4 +17,4 @@ public CreatedEvent(T entity) } public T Entity { get; } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Events/DeletedEvent.cs b/src/Domain/Common/Events/DeletedEvent.cs index 4db64978d..a2d66b588 100644 --- a/src/Domain/Common/Events/DeletedEvent.cs +++ b/src/Domain/Common/Events/DeletedEvent.cs @@ -8,6 +8,7 @@ using CleanArchitecture.Blazor.Domain.Common.Entities; namespace CleanArchitecture.Blazor.Domain.Common.Events; + public class DeletedEvent : DomainEvent where T : IEntity { public DeletedEvent(T entity) @@ -16,4 +17,4 @@ public DeletedEvent(T entity) } public T Entity { get; } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Events/UpdatedEvent.cs b/src/Domain/Common/Events/UpdatedEvent.cs index 48bfea041..dbbd4b122 100644 --- a/src/Domain/Common/Events/UpdatedEvent.cs +++ b/src/Domain/Common/Events/UpdatedEvent.cs @@ -1,6 +1,7 @@ using CleanArchitecture.Blazor.Domain.Common.Entities; namespace CleanArchitecture.Blazor.Domain.Common.Events; + public class UpdatedEvent : DomainEvent where T : IEntity { public UpdatedEvent(T entity) @@ -9,4 +10,4 @@ public UpdatedEvent(T entity) } public T Entity { get; } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Exceptions/UnsupportedColourException.cs b/src/Domain/Common/Exceptions/UnsupportedColourException.cs index 2272bf6da..8dcddd6ba 100644 --- a/src/Domain/Common/Exceptions/UnsupportedColourException.cs +++ b/src/Domain/Common/Exceptions/UnsupportedColourException.cs @@ -9,4 +9,4 @@ public UnsupportedColourException(string code) : base($"Colour \"{code}\" is unsupported.") { } -} +} \ No newline at end of file diff --git a/src/Domain/Common/ValueObject.cs b/src/Domain/Common/ValueObject.cs index 386690ffd..3a8937e61 100644 --- a/src/Domain/Common/ValueObject.cs +++ b/src/Domain/Common/ValueObject.cs @@ -9,27 +9,21 @@ public abstract class ValueObject { protected static bool EqualOperator(ValueObject left, ValueObject right) { - if (left is null ^ right is null) - { - return false; - } + if (left is null ^ right is null) return false; return left?.Equals(right) != false; } protected static bool NotEqualOperator(ValueObject left, ValueObject right) { - return !(EqualOperator(left, right)); + return !EqualOperator(left, right); } protected abstract IEnumerable GetEqualityComponents(); public override bool Equals(object obj) { - if (obj == null || obj.GetType() != GetType()) - { - return false; - } + if (obj == null || obj.GetType() != GetType()) return false; var other = (ValueObject)obj; return GetEqualityComponents().SequenceEqual(other.GetEqualityComponents()); @@ -41,4 +35,4 @@ public override int GetHashCode() .Select(x => x != null ? x.GetHashCode() : 0) .Aggregate((x, y) => x ^ y); } -} +} \ No newline at end of file diff --git a/src/Domain/Domain.csproj b/src/Domain/Domain.csproj index a0cc1f16c..cccaa204d 100644 --- a/src/Domain/Domain.csproj +++ b/src/Domain/Domain.csproj @@ -1,18 +1,18 @@  - - net8.0 - CleanArchitecture.Blazor.Domain - CleanArchitecture.Blazor.Domain - enable - enable - default - + + net8.0 + CleanArchitecture.Blazor.Domain + CleanArchitecture.Blazor.Domain + enable + enable + default + - - - - - + + + + + diff --git a/src/Domain/Entities/AuditTrail.cs b/src/Domain/Entities/AuditTrail.cs index 969108246..5dea2b0a8 100644 --- a/src/Domain/Entities/AuditTrail.cs +++ b/src/Domain/Entities/AuditTrail.cs @@ -19,10 +19,10 @@ public class AuditTrail : IEntity public Dictionary? NewValues { get; set; } public List? AffectedColumns { get; set; } public Dictionary PrimaryKey { get; set; } = new(); - public List TemporaryProperties { get; } = new(); public bool HasTemporaryProperties => TemporaryProperties.Any(); } + public enum AuditType { None, diff --git a/src/Domain/Entities/Customer.cs b/src/Domain/Entities/Customer.cs index b12666414..777bf46e9 100644 --- a/src/Domain/Entities/Customer.cs +++ b/src/Domain/Entities/Customer.cs @@ -13,6 +13,4 @@ public class Customer : BaseAuditableEntity { public string? Name { get; set; } public string? Description { get; set; } - - -} +} \ No newline at end of file diff --git a/src/Domain/Entities/Document.cs b/src/Domain/Entities/Document.cs index c44ca0c72..a11e1b64d 100644 --- a/src/Domain/Entities/Document.cs +++ b/src/Domain/Entities/Document.cs @@ -4,7 +4,6 @@ using CleanArchitecture.Blazor.Domain.Common.Entities; using CleanArchitecture.Blazor.Domain.Common.Enums; - namespace CleanArchitecture.Blazor.Domain.Entities; public class Document : OwnerPropertyEntity, IMayHaveTenant, IAuditTrial @@ -16,9 +15,10 @@ public class Document : OwnerPropertyEntity, IMayHaveTenant, IAuditTrial public bool IsPublic { get; set; } public string? URL { get; set; } public DocumentType DocumentType { get; set; } = default!; - public string? TenantId { get; set; } public virtual Tenant? Tenant { get; set; } + public string? TenantId { get; set; } } + public enum DocumentType { Document, diff --git a/src/Domain/Entities/KeyValue.cs b/src/Domain/Entities/KeyValue.cs index c749b9467..789cbcd3b 100644 --- a/src/Domain/Entities/KeyValue.cs +++ b/src/Domain/Entities/KeyValue.cs @@ -12,15 +12,11 @@ public class KeyValue : BaseAuditableEntity, IAuditTrial public string? Value { get; set; } public string? Text { get; set; } public string? Description { get; set; } - } + public enum Picklist { - [Description("Status")] - Status, - [Description("Unit")] - Unit, - [Description("Brand")] - Brand -} - + [Description("Status")] Status, + [Description("Unit")] Unit, + [Description("Brand")] Brand +} \ No newline at end of file diff --git a/src/Domain/Entities/Logger.cs b/src/Domain/Entities/Logger.cs index 30faec806..8c0fec06e 100644 --- a/src/Domain/Entities/Logger.cs +++ b/src/Domain/Entities/Logger.cs @@ -11,7 +11,6 @@ namespace CleanArchitecture.Blazor.Domain.Entities; public class Logger : IEntity { - public int Id { get; set; } public string? Message { get; set; } public string? MessageTemplate { get; set; } public string Level { get; set; } = default!; @@ -23,4 +22,5 @@ public class Logger : IEntity public string? ClientAgent { get; set; } public string? Properties { get; set; } public string? LogEvent { get; set; } + public int Id { get; set; } } \ No newline at end of file diff --git a/src/Domain/Entities/Product.cs b/src/Domain/Entities/Product.cs index 033907233..01c79396b 100644 --- a/src/Domain/Entities/Product.cs +++ b/src/Domain/Entities/Product.cs @@ -13,11 +13,11 @@ public class Product : BaseAuditableEntity public string? Unit { get; set; } public decimal Price { get; set; } public List? Pictures { get; set; } - } + public class ProductImage { public required string Name { get; set; } public decimal Size { get; set; } public required string Url { get; set; } -} +} \ No newline at end of file diff --git a/src/Domain/Entities/Tenant.cs b/src/Domain/Entities/Tenant.cs index e599c1625..af07bf1e9 100644 --- a/src/Domain/Entities/Tenant.cs +++ b/src/Domain/Entities/Tenant.cs @@ -1,9 +1,10 @@ using CleanArchitecture.Blazor.Domain.Common.Entities; namespace CleanArchitecture.Blazor.Domain.Entities; + public class Tenant : IEntity { - public string Id { get; set; } = Guid.NewGuid().ToString(); public string? Name { get; set; } public string? Description { get; set; } -} + public string Id { get; set; } = Guid.NewGuid().ToString(); +} \ No newline at end of file diff --git a/src/Domain/Events/CustomerCreatedEvent.cs b/src/Domain/Events/CustomerCreatedEvent.cs index 4e7d3df62..d0931449a 100644 --- a/src/Domain/Events/CustomerCreatedEvent.cs +++ b/src/Domain/Events/CustomerCreatedEvent.cs @@ -2,16 +2,14 @@ // The .NET Foundation licenses this file to you under the MIT license. - namespace CleanArchitecture.Blazor.Domain.Events; - public class CustomerCreatedEvent : DomainEvent +public class CustomerCreatedEvent : DomainEvent +{ + public CustomerCreatedEvent(Customer item) { - public CustomerCreatedEvent(Customer item) - { - Item = item; - } - - public Customer Item { get; } + Item = item; } + public Customer Item { get; } +} \ No newline at end of file diff --git a/src/Domain/Events/CustomerDeletedEvent.cs b/src/Domain/Events/CustomerDeletedEvent.cs index efa5bb8d4..1c85dd6da 100644 --- a/src/Domain/Events/CustomerDeletedEvent.cs +++ b/src/Domain/Events/CustomerDeletedEvent.cs @@ -3,13 +3,12 @@ namespace CleanArchitecture.Blazor.Domain.Events; - public class CustomerDeletedEvent : DomainEvent +public class CustomerDeletedEvent : DomainEvent +{ + public CustomerDeletedEvent(Customer item) { - public CustomerDeletedEvent(Customer item) - { - Item = item; - } - - public Customer Item { get; } + Item = item; } + public Customer Item { get; } +} \ No newline at end of file diff --git a/src/Domain/Events/CustomerUpdatedEvent.cs b/src/Domain/Events/CustomerUpdatedEvent.cs index 57c91c9f5..a58306ff8 100644 --- a/src/Domain/Events/CustomerUpdatedEvent.cs +++ b/src/Domain/Events/CustomerUpdatedEvent.cs @@ -3,14 +3,12 @@ namespace CleanArchitecture.Blazor.Domain.Events; - - public class CustomerUpdatedEvent : DomainEvent +public class CustomerUpdatedEvent : DomainEvent +{ + public CustomerUpdatedEvent(Customer item) { - public CustomerUpdatedEvent(Customer item) - { - Item = item; - } - - public Customer Item { get; } + Item = item; } + public Customer Item { get; } +} \ No newline at end of file diff --git a/src/Domain/Identity/ApplicationRole.cs b/src/Domain/Identity/ApplicationRole.cs index a1e2c4d4a..18e42f5e0 100644 --- a/src/Domain/Identity/ApplicationRole.cs +++ b/src/Domain/Identity/ApplicationRole.cs @@ -5,10 +5,7 @@ namespace CleanArchitecture.Blazor.Domain.Identity; public class ApplicationRole : IdentityRole { - public string? Description { get; set; } - public virtual ICollection RoleClaims { get; set; } - public virtual ICollection UserRoles { get; set; } - public ApplicationRole() : base() + public ApplicationRole() { RoleClaims = new HashSet(); UserRoles = new HashSet(); @@ -19,4 +16,8 @@ public ApplicationRole(string roleName) : base(roleName) RoleClaims = new HashSet(); UserRoles = new HashSet(); } -} + + public string? Description { get; set; } + public virtual ICollection RoleClaims { get; set; } + public virtual ICollection UserRoles { get; set; } +} \ No newline at end of file diff --git a/src/Domain/Identity/ApplicationRoleClaim.cs b/src/Domain/Identity/ApplicationRoleClaim.cs index 30c489605..1aad3769f 100644 --- a/src/Domain/Identity/ApplicationRoleClaim.cs +++ b/src/Domain/Identity/ApplicationRoleClaim.cs @@ -1,4 +1,5 @@ namespace CleanArchitecture.Blazor.Domain.Identity; + public class ApplicationRoleClaim : IdentityRoleClaim { public string? Description { get; set; } diff --git a/src/Domain/Identity/ApplicationUser.cs b/src/Domain/Identity/ApplicationUser.cs index 8843b985e..e24ad5c0c 100644 --- a/src/Domain/Identity/ApplicationUser.cs +++ b/src/Domain/Identity/ApplicationUser.cs @@ -7,12 +7,21 @@ namespace CleanArchitecture.Blazor.Domain.Identity; public class ApplicationUser : IdentityUser { + public ApplicationUser() + { + UserClaims = new HashSet(); + UserRoles = new HashSet(); + Logins = new HashSet(); + Tokens = new HashSet(); + } + public string? DisplayName { get; set; } public string? Provider { get; set; } = "Local"; public string? TenantId { get; set; } public string? TenantName { get; set; } - [Column(TypeName = "text")] - public string? ProfilePictureDataUrl { get; set; } + + [Column(TypeName = "text")] public string? ProfilePictureDataUrl { get; set; } + public bool IsActive { get; set; } public bool IsLive { get; set; } public string? RefreshToken { get; set; } @@ -23,15 +32,6 @@ public class ApplicationUser : IdentityUser public virtual ICollection Tokens { get; set; } public string? SuperiorId { get; set; } = null; - [ForeignKey("SuperiorId")] - public ApplicationUser? Superior { get; set; } = null; - public ApplicationUser() : base() - { - UserClaims = new HashSet(); - UserRoles = new HashSet(); - Logins = new HashSet(); - Tokens = new HashSet(); - } - -} + [ForeignKey("SuperiorId")] public ApplicationUser? Superior { get; set; } = null; +} \ No newline at end of file diff --git a/src/Domain/Identity/ApplicationUserClaim.cs b/src/Domain/Identity/ApplicationUserClaim.cs index 6e67f2f3b..a484a9e32 100644 --- a/src/Domain/Identity/ApplicationUserClaim.cs +++ b/src/Domain/Identity/ApplicationUserClaim.cs @@ -7,4 +7,4 @@ public class ApplicationUserClaim : IdentityUserClaim { public string? Description { get; set; } public virtual ApplicationUser User { get; set; } = default!; -} +} \ No newline at end of file diff --git a/src/Domain/Identity/ApplicationUserLogin.cs b/src/Domain/Identity/ApplicationUserLogin.cs index 0c65dd11c..2c769fd9c 100644 --- a/src/Domain/Identity/ApplicationUserLogin.cs +++ b/src/Domain/Identity/ApplicationUserLogin.cs @@ -6,4 +6,4 @@ namespace CleanArchitecture.Blazor.Domain.Identity; public class ApplicationUserLogin : IdentityUserLogin { public virtual ApplicationUser User { get; set; } = default!; -} +} \ No newline at end of file diff --git a/src/Domain/Identity/ApplicationUserRole.cs b/src/Domain/Identity/ApplicationUserRole.cs index f062ef8c2..a55b898f6 100644 --- a/src/Domain/Identity/ApplicationUserRole.cs +++ b/src/Domain/Identity/ApplicationUserRole.cs @@ -7,5 +7,4 @@ public class ApplicationUserRole : IdentityUserRole { public virtual ApplicationUser User { get; set; } = default!; public virtual ApplicationRole Role { get; set; } = default!; - -} +} \ No newline at end of file diff --git a/src/Domain/Identity/ApplicationUserToken.cs b/src/Domain/Identity/ApplicationUserToken.cs index 9d44a0d92..df687264f 100644 --- a/src/Domain/Identity/ApplicationUserToken.cs +++ b/src/Domain/Identity/ApplicationUserToken.cs @@ -6,4 +6,4 @@ namespace CleanArchitecture.Blazor.Domain.Identity; public class ApplicationUserToken : IdentityUserToken { public virtual ApplicationUser User { get; set; } = default!; -} +} \ No newline at end of file diff --git a/src/Domain/ValueObjects/Colour.cs b/src/Domain/ValueObjects/Colour.cs index 278b3428e..a05339afc 100644 --- a/src/Domain/ValueObjects/Colour.cs +++ b/src/Domain/ValueObjects/Colour.cs @@ -7,10 +7,6 @@ namespace CleanArchitecture.Blazor.Domain.ValueObjects; #nullable disable public class Colour : ValueObject { - static Colour() - { - } - private Colour() { } @@ -20,18 +16,6 @@ private Colour(string code) Code = code; } - public static Colour From(string code) - { - var colour = new Colour { Code = code }; - - if (!SupportedColours.Contains(colour)) - { - throw new UnsupportedColourException(code); - } - - return colour; - } - public static Colour White => new("#FFFFFF"); public static Colour Red => new("#FF5733"); @@ -50,21 +34,6 @@ public static Colour From(string code) public string Code { get; private set; } - public static implicit operator string(Colour colour) - { - return colour.ToString(); - } - - public static explicit operator Colour(string code) - { - return From(code); - } - - public override string ToString() - { - return Code; - } - protected static IEnumerable SupportedColours { get @@ -80,8 +49,32 @@ protected static IEnumerable SupportedColours } } + public static Colour From(string code) + { + var colour = new Colour { Code = code }; + + if (!SupportedColours.Contains(colour)) throw new UnsupportedColourException(code); + + return colour; + } + + public static implicit operator string(Colour colour) + { + return colour.ToString(); + } + + public static explicit operator Colour(string code) + { + return From(code); + } + + public override string ToString() + { + return Code; + } + protected override IEnumerable GetEqualityComponents() { yield return Code; } -} +} \ No newline at end of file diff --git a/src/Domain/_Imports.cs b/src/Domain/_Imports.cs index ed41b95af..e84114f06 100644 --- a/src/Domain/_Imports.cs +++ b/src/Domain/_Imports.cs @@ -3,4 +3,4 @@ global using CleanArchitecture.Blazor.Domain.Common; global using CleanArchitecture.Blazor.Domain.Entities; -global using Microsoft.AspNetCore.Identity; +global using Microsoft.AspNetCore.Identity; \ No newline at end of file diff --git a/src/Infrastructure/Configurations/DashbordSettings.cs b/src/Infrastructure/Configurations/DashbordSettings.cs index be39c05bc..4b4088442 100644 --- a/src/Infrastructure/Configurations/DashbordSettings.cs +++ b/src/Infrastructure/Configurations/DashbordSettings.cs @@ -33,22 +33,6 @@ public class DashboardSettings : IApplicationSettings /// public int LoadingTransitionScreenDuration { get; set; } = 600; - /// - /// Current application version - /// - public string Version { get; set; } = "1.3.0"; - - /// - /// Application framework - /// - - public string App { get; set; } = "Blazor"; - - /// - /// The application name / title - /// - public string AppName { get; set; } = "Blazor Dashboard"; - /// /// Application framework including the version /// @@ -69,4 +53,20 @@ public class DashboardSettings : IApplicationSettings /// Copyright watermark /// public string Copyright { get; set; } = "@2023 Copyright"; + + /// + /// Current application version + /// + public string Version { get; set; } = "1.3.0"; + + /// + /// Application framework + /// + + public string App { get; set; } = "Blazor"; + + /// + /// The application name / title + /// + public string AppName { get; set; } = "Blazor Dashboard"; } \ No newline at end of file diff --git a/src/Infrastructure/Configurations/DatabaseSettings.cs b/src/Infrastructure/Configurations/DatabaseSettings.cs index 54cc579ca..9709fb5a6 100644 --- a/src/Infrastructure/Configurations/DatabaseSettings.cs +++ b/src/Infrastructure/Configurations/DatabaseSettings.cs @@ -30,17 +30,13 @@ public class DatabaseSettings : IValidatableObject public IEnumerable Validate(ValidationContext validationContext) { if (string.IsNullOrEmpty(DBProvider)) - { yield return new ValidationResult( $"{nameof(DatabaseSettings)}.{nameof(DBProvider)} is not configured", new[] { nameof(DBProvider) }); - } if (string.IsNullOrEmpty(ConnectionString)) - { yield return new ValidationResult( $"{nameof(DatabaseSettings)}.{nameof(ConnectionString)} is not configured", new[] { nameof(ConnectionString) }); - } } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Configurations/IdentitySettings.cs b/src/Infrastructure/Configurations/IdentitySettings.cs index 7a7d2180f..b73baf2c3 100644 --- a/src/Infrastructure/Configurations/IdentitySettings.cs +++ b/src/Infrastructure/Configurations/IdentitySettings.cs @@ -9,38 +9,38 @@ public class IdentitySettings : IIdentitySettings // Password settings. /// - /// Gets or sets a value indicating whether a password should require a digit. + /// Gets or sets a value indicating whether a password should require a digit. /// public bool RequireDigit { get; set; } = true; /// - /// Gets or sets a value indicating what the minimum required length of a password should be. + /// Gets or sets a value indicating what the minimum required length of a password should be. /// public int RequiredLength { get; set; } = 6; /// - /// Gets or sets a value indicating what the maximum required length of a password should be. + /// Gets or sets a value indicating what the maximum required length of a password should be. /// public int MaxLength { get; set; } = 16; /// - /// Gets or sets a value indicating whether the password should require a non-alphanumeric(not: 0-9, A-Z) character. + /// Gets or sets a value indicating whether the password should require a non-alphanumeric(not: 0-9, A-Z) character. /// public bool RequireNonAlphanumeric { get; set; } = true; /// - /// Gets or sets a value indicating whether a password should require an upper-case character. + /// Gets or sets a value indicating whether a password should require an upper-case character. /// public bool RequireUpperCase { get; set; } = true; /// - /// Gets or sets a value indicating whether a password should require an lower-case character. + /// Gets or sets a value indicating whether a password should require an lower-case character. /// public bool RequireLowerCase { get; set; } = false; // Lockout settings. /// - /// Gets or sets a value indicating what the default lockout TimeSpan should be, measured in minutes. + /// Gets or sets a value indicating what the default lockout TimeSpan should be, measured in minutes. /// public int DefaultLockoutTimeSpan { get; set; } = 30; } \ No newline at end of file diff --git a/src/Infrastructure/Constants/ClaimTypes/ApplicationClaimTypes.cs b/src/Infrastructure/Constants/ClaimTypes/ApplicationClaimTypes.cs index 3fb35ec81..d8fbd48a3 100644 --- a/src/Infrastructure/Constants/ClaimTypes/ApplicationClaimTypes.cs +++ b/src/Infrastructure/Constants/ClaimTypes/ApplicationClaimTypes.cs @@ -14,4 +14,4 @@ public static class ApplicationClaimTypes public const string Permission = "Permission"; public const string AssignedRoles = "AssignedRoles"; public const string ProfilePictureDataUrl = "ProfilePictureDataUrl"; -} +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/ConstantString.cs b/src/Infrastructure/Constants/ConstantString.cs index 45af74f3c..1df639455 100644 --- a/src/Infrastructure/Constants/ConstantString.cs +++ b/src/Infrastructure/Constants/ConstantString.cs @@ -2,9 +2,12 @@ using System.Resources; namespace CleanArchitecture.Blazor.Infrastructure.Constants; + public static class ConstantString { - public const string CONSTANTSTRINGRESOURCEID = "CleanArchitecture.Blazor.Infrastructure.Resources.Constants.ConstantString"; + public const string CONSTANTSTRINGRESOURCEID = + "CleanArchitecture.Blazor.Infrastructure.Resources.Constants.ConstantString"; + private static readonly ResourceManager rm; static ConstantString() @@ -12,11 +15,6 @@ static ConstantString() rm = new ResourceManager(CONSTANTSTRINGRESOURCEID, typeof(ConstantString).Assembly); } - public static string Localize(string key) - { - return rm.GetString(key, CultureInfo.CurrentCulture) ?? key; - } - //==========================================================// //for button text public static string Refresh => Localize("Refresh"); @@ -84,13 +82,25 @@ public static string Localize(string key) public static string DeleteTheItem => Localize("Delete the {0}"); public static string DeleteItems => Localize("Delete selected items: {0}"); public static string DeleteConfirmation => Localize("Are you sure you want to delete this item: {0}?"); - public static string DeleteConfirmationWithId => Localize("Are you sure you want to delete this item with Id: {0}?"); - public static string DeleteConfirmWithSelected => Localize("Are you sure you want to delete the selected items: {0}?"); + + public static string DeleteConfirmationWithId => + Localize("Are you sure you want to delete this item with Id: {0}?"); + + public static string DeleteConfirmWithSelected => + Localize("Are you sure you want to delete the selected items: {0}?"); + public static string NoRecords => Localize("There are no records to view."); public static string Loading => Localize("Loading..."); public static string Waiting => Localize("Wating..."); public static string Processing => Localize("Processing..."); public static string DeleteConfirmationTitle => Localize("Delete Confirmation"); public static string LogoutConfirmationTitle => Localize("Logout Confirmation"); - public static string LogoutConfirmation => Localize("You are attempting to log out of application. Do you really want to log out?"); -} + + public static string LogoutConfirmation => + Localize("You are attempting to log out of application. Do you really want to log out?"); + + public static string Localize(string key) + { + return rm.GetString(key, CultureInfo.CurrentCulture) ?? key; + } +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/Database/DbProviderKeys.cs b/src/Infrastructure/Constants/Database/DbProviderKeys.cs index 6babb2510..e716f27d2 100644 --- a/src/Infrastructure/Constants/Database/DbProviderKeys.cs +++ b/src/Infrastructure/Constants/Database/DbProviderKeys.cs @@ -1,7 +1,8 @@ namespace CleanArchitecture.Blazor.Infrastructure.Constants.Database; + internal class DbProviderKeys { public const string Npgsql = "postgresql"; public const string SqlServer = "mssql"; public const string SqLite = "sqlite"; -} +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/GlobalVariable.cs b/src/Infrastructure/Constants/GlobalVariable.cs index b2c765147..70eb9c647 100644 --- a/src/Infrastructure/Constants/GlobalVariable.cs +++ b/src/Infrastructure/Constants/GlobalVariable.cs @@ -1,5 +1,6 @@ namespace CleanArchitecture.Blazor.Infrastructure.Constants; + public static class GlobalVariable { public static long MaxAllowedSize => 512000 * 100; -} +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/LocalStorage/LocalStorage.cs b/src/Infrastructure/Constants/LocalStorage/LocalStorage.cs index c7c819d3b..fe2aff779 100644 --- a/src/Infrastructure/Constants/LocalStorage/LocalStorage.cs +++ b/src/Infrastructure/Constants/LocalStorage/LocalStorage.cs @@ -1,4 +1,5 @@ namespace CleanArchitecture.Blazor.Infrastructure.Constants.LocalStorage; + public static class LocalStorage { public const string UserId = "UserId"; @@ -6,4 +7,4 @@ public static class LocalStorage public const string TenantId = "TenantId"; public const string TenantName = "TenantName"; public const string ClaimsIdentity = "ClaimsIdentity"; -} +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/Localization/LocalizationConstants.cs b/src/Infrastructure/Constants/Localization/LocalizationConstants.cs index 4add2dc5c..5b1139305 100644 --- a/src/Infrastructure/Constants/Localization/LocalizationConstants.cs +++ b/src/Infrastructure/Constants/Localization/LocalizationConstants.cs @@ -6,62 +6,64 @@ namespace CleanArchitecture.Blazor.Infrastructure.Constants.Localization; public static class LocalizationConstants { public const string ResourcesPath = "Resources"; - public static readonly LanguageCode[] SupportedLanguages = { - new LanguageCode - { - Code = "en-US", - DisplayName= "English" - }, - new LanguageCode - { - Code = "de-DE", - DisplayName = "Deutsch" - }, - new LanguageCode - { - Code = "ru", - DisplayName = "Russian" - }, - new LanguageCode - { - Code = "fr-FR", - DisplayName = "French" - }, - new LanguageCode - { - Code = "ja-JP", - DisplayName = "Japanese" - }, - new LanguageCode - { - Code = "km-KH", - DisplayName = "Khmer" - }, - new LanguageCode - { - Code = "ca-ES", - DisplayName = "Catalan" - }, - new LanguageCode - { - Code = "es-ES", - DisplayName = "Spanish" - }, - new LanguageCode - { - Code = "zh-CN", - DisplayName = "中文" - }, - new LanguageCode - { - Code = "ar-iq", - DisplayName = "Arabic Iraq" - } - }; + + public static readonly LanguageCode[] SupportedLanguages = + { + new() + { + Code = "en-US", + DisplayName = "English" + }, + new() + { + Code = "de-DE", + DisplayName = "Deutsch" + }, + new() + { + Code = "ru", + DisplayName = "Russian" + }, + new() + { + Code = "fr-FR", + DisplayName = "French" + }, + new() + { + Code = "ja-JP", + DisplayName = "Japanese" + }, + new() + { + Code = "km-KH", + DisplayName = "Khmer" + }, + new() + { + Code = "ca-ES", + DisplayName = "Catalan" + }, + new() + { + Code = "es-ES", + DisplayName = "Spanish" + }, + new() + { + Code = "zh-CN", + DisplayName = "中文" + }, + new() + { + Code = "ar-iq", + DisplayName = "Arabic Iraq" + } + }; } public class LanguageCode { public string DisplayName { get; set; } = "en-US"; public string Code { get; set; } = "English"; -} +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/Permission/PermissionModules.cs b/src/Infrastructure/Constants/Permission/PermissionModules.cs index 7d5fea58e..88b12832a 100644 --- a/src/Infrastructure/Constants/Permission/PermissionModules.cs +++ b/src/Infrastructure/Constants/Permission/PermissionModules.cs @@ -5,32 +5,32 @@ namespace CleanArchitecture.Blazor.Infrastructure.Constants.Permission; public static class PermissionModules { + public const string Users = "Users"; + public const string Roles = "Roles"; + public const string Products = "Products"; + public const string Brands = "Brands"; + public const string Companies = "Companies"; + public static List GeneratePermissionsForModule(string module) { - return new List() - { - $"Permissions.{module}.Create", - $"Permissions.{module}.View", - $"Permissions.{module}.Edit", - $"Permissions.{module}.Delete" - }; + return new List + { + $"Permissions.{module}.Create", + $"Permissions.{module}.View", + $"Permissions.{module}.Edit", + $"Permissions.{module}.Delete" + }; } public static List GetAllPermissionsModules() { - return new List() - { - Users, - Roles, - Products, - Brands, - Companies - }; + return new List + { + Users, + Roles, + Products, + Brands, + Companies + }; } - - public const string Users = "Users"; - public const string Roles = "Roles"; - public const string Products = "Products"; - public const string Brands = "Brands"; - public const string Companies = "Companies"; -} +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/Permission/Permissions.cs b/src/Infrastructure/Constants/Permission/Permissions.cs index 98a6cf566..6f49c7ad2 100644 --- a/src/Infrastructure/Constants/Permission/Permissions.cs +++ b/src/Infrastructure/Constants/Permission/Permissions.cs @@ -8,6 +8,24 @@ namespace CleanArchitecture.Blazor.Infrastructure.Constants.Permission; public static class Permissions { + /// + /// Returns a list of Permissions. + /// + /// + public static List GetRegisteredPermissions() + { + var permissions = new List(); + foreach (var prop in typeof(Permissions).GetNestedTypes().SelectMany(c => + c.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy))) + { + var propertyValue = prop.GetValue(null); + if (propertyValue is not null) + permissions.Add((string)propertyValue); + } + + return permissions; + } + [DisplayName("AuditTrails")] [Description("AuditTrails Permissions")] public static class AuditTrails @@ -16,6 +34,7 @@ public static class AuditTrails public const string Search = "Permissions.AuditTrails.Search"; public const string Export = "Permissions.AuditTrails.Export"; } + [DisplayName("Logs")] [Description("Logs Permissions")] public static class Logs @@ -39,6 +58,7 @@ public static class Products public const string Export = "Permissions.Products.Export"; public const string Import = "Permissions.Products.Import"; } + [DisplayName("Customers")] [Description("Customers Permissions")] public static class Customers @@ -78,6 +98,7 @@ public static class Documents public const string Import = "Permissions.Documents.Import"; public const string Download = "Permissions.Documents.Download"; } + [DisplayName("Dictionaries")] [Description("Dictionaries Permissions")] public static class Dictionaries @@ -122,6 +143,7 @@ public static class Roles public const string ManagePermissions = "Permissions.Roles.Permissions"; public const string ManageNavigation = "Permissions.Roles.Navigation"; } + [DisplayName("Multi-Tenant")] [Description("Multi-Tenant Permissions")] public static class Tenants @@ -132,6 +154,7 @@ public static class Tenants public const string Delete = "Permissions.Tenants.Delete"; public const string Search = "Permissions.Tenants.Search"; } + [DisplayName("Role Claims")] [Description("Role Claims Permissions")] public static class RoleClaims @@ -144,7 +167,6 @@ public static class RoleClaims } - [DisplayName("Dashboards")] [Description("Dashboards Permissions")] public static class Dashboards @@ -159,23 +181,4 @@ public static class Hangfire public const string View = "Permissions.Hangfire.View"; public const string Jobs = "Permissions.Hangfire.Jobs"; } - - - /// - /// Returns a list of Permissions. - /// - /// - public static List GetRegisteredPermissions() - { - var permissions = new List(); - foreach (var prop in typeof(Permissions).GetNestedTypes().SelectMany(c => c.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy))) - { - var propertyValue = prop.GetValue(null); - if (propertyValue is not null) - permissions.Add((string)propertyValue); - } - return permissions; - } - - -} +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/Role/RoleNameConstants.cs b/src/Infrastructure/Constants/Role/RoleNameConstants.cs index f2dc12a87..6a3ef516e 100644 --- a/src/Infrastructure/Constants/Role/RoleNameConstants.cs +++ b/src/Infrastructure/Constants/Role/RoleNameConstants.cs @@ -6,7 +6,6 @@ namespace CleanArchitecture.Blazor.Infrastructure.Constants.Role; public abstract class RoleName { public const string Admin = nameof(Admin); - public const string Basic =nameof(Basic); - public const string Users =nameof(Users); - -} + public const string Basic = nameof(Basic); + public const string Users = nameof(Users); +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/User/UserNameConstants.cs b/src/Infrastructure/Constants/User/UserNameConstants.cs index 7b8932d5f..f0e290269 100644 --- a/src/Infrastructure/Constants/User/UserNameConstants.cs +++ b/src/Infrastructure/Constants/User/UserNameConstants.cs @@ -9,4 +9,4 @@ public abstract class UserName public const string Demo = nameof(Demo); public const string Users = nameof(Users); public const string DefaultPassword = "Password123!"; -} +} \ No newline at end of file diff --git a/src/Infrastructure/DependencyInjection.cs b/src/Infrastructure/DependencyInjection.cs index d62729817..13bf2d2cc 100644 --- a/src/Infrastructure/DependencyInjection.cs +++ b/src/Infrastructure/DependencyInjection.cs @@ -43,38 +43,42 @@ public static IServiceCollection AddInfrastructure(this IServiceCollection servi { options.UseCookie = false; - options.AccessSigningOptions = new JwtSigningOptions() + options.AccessSigningOptions = new JwtSigningOptions { - SigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yn4$#cr=+i@eljzlhhr2xlgf98aud&(3&!po3r60wlm^3*huh#")), + SigningKey = + new SymmetricSecurityKey( + Encoding.UTF8.GetBytes("yn4$#cr=+i@eljzlhhr2xlgf98aud&(3&!po3r60wlm^3*huh#")), Algorithm = SecurityAlgorithms.HmacSha256, - ExpirationMinutes = 120, + ExpirationMinutes = 120 }; - options.RefreshSigningOptions = new JwtSigningOptions() + options.RefreshSigningOptions = new JwtSigningOptions { - SigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("e_qmg*)=vr9yxpp^g^#((wkwk7fh#+3qy!zzq+r-hifw2(_u+=")), + SigningKey = + new SymmetricSecurityKey( + Encoding.UTF8.GetBytes("e_qmg*)=vr9yxpp^g^#((wkwk7fh#+3qy!zzq+r-hifw2(_u+=")), Algorithm = SecurityAlgorithms.HmacSha256, - ExpirationMinutes = 2880, + ExpirationMinutes = 2880 }; - options.AccessValidationParameters = new TokenValidationParameters() + options.AccessValidationParameters = new TokenValidationParameters { IssuerSigningKey = options.AccessSigningOptions.SigningKey, ValidIssuer = options.Issuer, ValidAudience = options.Audience, ValidateIssuerSigningKey = true, - ClockSkew = TimeSpan.Zero, + ClockSkew = TimeSpan.Zero }; - options.RefreshValidationParameters = new TokenValidationParameters() + options.RefreshValidationParameters = new TokenValidationParameters { IssuerSigningKey = options.RefreshSigningOptions.SigningKey, ValidIssuer = options.Issuer, ValidAudience = options.Audience, ValidateIssuerSigningKey = true, - ClockSkew = TimeSpan.Zero, + ClockSkew = TimeSpan.Zero }; }); - + services.AddSingleton(); return services; @@ -110,22 +114,18 @@ private static IServiceCollection AddDatabase(this IServiceCollection services, .AddScoped(); if (configuration.GetValue("UseInMemoryDatabase")) - { services.AddDbContext(options => { options.UseInMemoryDatabase("BlazorDashboardDb"); options.EnableSensitiveDataLogging(); }); - } else - { services.AddDbContext((p, m) => { var databaseSettings = p.GetRequiredService>().Value; m.AddInterceptors(p.GetServices()); m.UseDatabase(databaseSettings.DBProvider, databaseSettings.ConnectionString); }); - } services.AddScoped, BlazorContextFactory>(); services.AddTransient(provider => @@ -143,7 +143,7 @@ private static DbContextOptionsBuilder UseDatabase(this DbContextOptionsBuilder case DbProviderKeys.Npgsql: AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true); return builder.UseNpgsql(connectionString, - e => e.MigrationsAssembly("CleanArchitecture.Blazor.Migrators.PostgreSQL")) + e => e.MigrationsAssembly("CleanArchitecture.Blazor.Migrators.PostgreSQL")) .UseSnakeCaseNamingConvention(); case DbProviderKeys.SqlServer: @@ -200,8 +200,8 @@ private static IServiceCollection AddMessageServices(this IServiceCollection ser // configure your sender and template choices with dependency injection. services.AddFluentEmail("support@blazorserver.com") - .AddRazorRenderer(Path.Combine(Directory.GetCurrentDirectory(), "Resources", "EmailTemplates")) - .AddMailKitSender(smtpClientOptions); + .AddRazorRenderer(Path.Combine(Directory.GetCurrentDirectory(), "Resources", "EmailTemplates")) + .AddMailKitSender(smtpClientOptions); return services; } @@ -218,7 +218,7 @@ private static IServiceCollection AddAuthenticationService(this IServiceCollecti { var identitySettings = configuration.GetRequiredSection(IdentitySettings.Key).Get(); - + // Password settings options.Password.RequireDigit = identitySettings!.RequireDigit; options.Password.RequiredLength = identitySettings.RequiredLength; @@ -237,7 +237,6 @@ private static IServiceCollection AddAuthenticationService(this IServiceCollecti // User settings options.User.RequireUniqueEmail = true; - }); services.AddScoped() @@ -245,32 +244,32 @@ private static IServiceCollection AddAuthenticationService(this IServiceCollecti { options.AddPolicy("CanPurge", policy => policy.RequireUserName(UserName.Administrator)); // Here I stored necessary permissions/roles in a constant - foreach (var prop in typeof(Permissions).GetNestedTypes().SelectMany(c => c.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy))) + foreach (var prop in typeof(Permissions).GetNestedTypes().SelectMany(c => + c.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy))) { var propertyValue = prop.GetValue(null); if (propertyValue is not null) - { - options.AddPolicy((string)propertyValue, policy => policy.RequireClaim(ApplicationClaimTypes.Permission, (string)propertyValue)); - } + options.AddPolicy((string)propertyValue, + policy => policy.RequireClaim(ApplicationClaimTypes.Permission, (string)propertyValue)); } }) .AddAuthentication() .AddJwtBearer(options => { - options.SaveToken = true; options.RequireHttpsMetadata = false; - options.TokenValidationParameters = new TokenValidationParameters() + options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = false, - IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yn4$#cr=+i@eljzlhhr2xlgf98aud&(3&!po3r60wlm^3*huh#")), + IssuerSigningKey = + new SymmetricSecurityKey( + Encoding.UTF8.GetBytes("yn4$#cr=+i@eljzlhhr2xlgf98aud&(3&!po3r60wlm^3*huh#")), ValidateIssuer = false, ValidateAudience = false, RoleClaimType = ClaimTypes.Role, ClockSkew = TimeSpan.Zero, - ValidateLifetime = true + ValidateLifetime = false }; - options.Events = new JwtBearerEvents { OnMessageReceived = context => @@ -279,17 +278,12 @@ private static IServiceCollection AddAuthenticationService(this IServiceCollecti var path = context.HttpContext.Request.Path; if (!string.IsNullOrEmpty(accessToken) && path.StartsWithSegments("/signalRHub")) // TODO: move in server? - { context.Token = accessToken.ToString().Substring(7); - } return Task.CompletedTask; } }; }); - services.ConfigureApplicationCookie(options => - { - options.LoginPath = "/pages/authentication/login"; - }); + services.ConfigureApplicationCookie(options => { options.LoginPath = "/pages/authentication/login"; }); services.AddSingleton() .AddSingleton(sp => { @@ -308,7 +302,7 @@ private static IServiceCollection AddFusionCacheService(this IServiceCollection { // CACHE DURATION Duration = TimeSpan.FromMinutes(30), - // FAIL-SAFE OPTIONS + // FAIL-SAFE OPTIONS IsFailSafeEnabled = true, FailSafeMaxDuration = TimeSpan.FromHours(2), FailSafeThrottleDuration = TimeSpan.FromSeconds(30), @@ -338,6 +332,4 @@ private static IServiceCollection AddSimpleJwtService(this IServiceCollection se return services; } - - } \ No newline at end of file diff --git a/src/Infrastructure/Extensions/AuthenticationProvidersServiceCollectionExtensions.cs b/src/Infrastructure/Extensions/AuthenticationProvidersServiceCollectionExtensions.cs index 3ae863d33..45995e918 100644 --- a/src/Infrastructure/Extensions/AuthenticationProvidersServiceCollectionExtensions.cs +++ b/src/Infrastructure/Extensions/AuthenticationProvidersServiceCollectionExtensions.cs @@ -1,24 +1,30 @@ using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authentication.OAuth; using Microsoft.Extensions.Configuration; namespace CleanArchitecture.Blazor.Infrastructure.Extensions; + /// -/// Extensions for configuring login via third party authentication providers. +/// Extensions for configuring login via third party authentication providers. /// public static class AuthenticationProvidersServiceCollectionExtensions { /// - /// Try to configure Microsoft account login if the application configuration has ClientId and ClientSecret. + /// Try to configure Microsoft account login if the application configuration has ClientId and ClientSecret. /// /// Authentication Builder. /// Application configuration. - /// Authentication builder configured to sign in with a Microsoft account, - /// if the required keys are specified in the application configuration. - public static AuthenticationBuilder TryConfigureMicrosoftAccount(this AuthenticationBuilder authenticationBuilder, IConfiguration configuration) + /// + /// Authentication builder configured to sign in with a Microsoft account, + /// if the required keys are specified in the application configuration. + /// + public static AuthenticationBuilder TryConfigureMicrosoftAccount(this AuthenticationBuilder authenticationBuilder, + IConfiguration configuration) { var microsoftAccountClientId = configuration["Authentication:Microsoft:ClientId"]; var microsoftAccountClientSecret = configuration["Authentication:Microsoft:ClientSecret"]; - if (string.IsNullOrWhiteSpace(microsoftAccountClientId) || string.IsNullOrWhiteSpace(microsoftAccountClientSecret)) + if (string.IsNullOrWhiteSpace(microsoftAccountClientId) || + string.IsNullOrWhiteSpace(microsoftAccountClientSecret)) return authenticationBuilder; return authenticationBuilder.AddMicrosoftAccount(options => @@ -30,13 +36,16 @@ public static AuthenticationBuilder TryConfigureMicrosoftAccount(this Authentica } /// - /// Try to configure Google account login if the application configuration has ClientId and ClientSecret. + /// Try to configure Google account login if the application configuration has ClientId and ClientSecret. /// /// Authentication Builder. /// Application configuration. - /// Authentication builder configured for Google account login, - /// if the required keys are specified in the application configuration. - public static AuthenticationBuilder TryConfigureGoogleAccount(this AuthenticationBuilder authenticationBuilder, IConfiguration configuration) + /// + /// Authentication builder configured for Google account login, + /// if the required keys are specified in the application configuration. + /// + public static AuthenticationBuilder TryConfigureGoogleAccount(this AuthenticationBuilder authenticationBuilder, + IConfiguration configuration) { var googleAccountClientId = configuration["Authentication:Google:ClientId"]; var googleAccountClientSecret = configuration["Authentication:Google:ClientSecret"]; @@ -47,16 +56,13 @@ public static AuthenticationBuilder TryConfigureGoogleAccount(this Authenticatio { options.ClientId = googleAccountClientId; options.ClientSecret = googleAccountClientSecret; - options.Events = new Microsoft.AspNetCore.Authentication.OAuth.OAuthEvents + options.Events = new OAuthEvents { OnCreatingTicket = c => { var identity = (ClaimsIdentity?)c?.Principal?.Identity; var avatar = c?.User.GetProperty("picture").GetString(); - if (!string.IsNullOrEmpty(avatar)) - { - identity?.AddClaim(new Claim("avatar", avatar)); - } + if (!string.IsNullOrEmpty(avatar)) identity?.AddClaim(new Claim("avatar", avatar)); return Task.CompletedTask; } }; diff --git a/src/Infrastructure/Extensions/ClaimsPrincipalExtensions.cs b/src/Infrastructure/Extensions/ClaimsPrincipalExtensions.cs index 3fcf6c2e8..1fc408011 100644 --- a/src/Infrastructure/Extensions/ClaimsPrincipalExtensions.cs +++ b/src/Infrastructure/Extensions/ClaimsPrincipalExtensions.cs @@ -8,32 +8,72 @@ namespace CleanArchitecture.Blazor.Infrastructure.Extensions; public static class ClaimsPrincipalExtensions { public static string? GetEmail(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ClaimTypes.Email); + { + return claimsPrincipal.FindFirstValue(ClaimTypes.Email); + } + public static string? GetPhoneNumber(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ClaimTypes.MobilePhone); + { + return claimsPrincipal.FindFirstValue(ClaimTypes.MobilePhone); + } + public static string? GetUserId(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ClaimTypes.NameIdentifier); + { + return claimsPrincipal.FindFirstValue(ClaimTypes.NameIdentifier); + } + public static string? GetUserName(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ClaimTypes.Name); + { + return claimsPrincipal.FindFirstValue(ClaimTypes.Name); + } + public static string? GetProvider(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ApplicationClaimTypes.Provider); + { + return claimsPrincipal.FindFirstValue(ApplicationClaimTypes.Provider); + } + public static string? GetDisplayName(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ClaimTypes.GivenName); + { + return claimsPrincipal.FindFirstValue(ClaimTypes.GivenName); + } + public static string? GetProfilePictureDataUrl(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ApplicationClaimTypes.ProfilePictureDataUrl); + { + return claimsPrincipal.FindFirstValue(ApplicationClaimTypes.ProfilePictureDataUrl); + } + public static string? GetSuperiorName(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ApplicationClaimTypes.SuperiorName); + { + return claimsPrincipal.FindFirstValue(ApplicationClaimTypes.SuperiorName); + } + public static string? GetSuperiorId(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ApplicationClaimTypes.SuperiorId); + { + return claimsPrincipal.FindFirstValue(ApplicationClaimTypes.SuperiorId); + } + public static string? GetTenantName(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ApplicationClaimTypes.TenantName); + { + return claimsPrincipal.FindFirstValue(ApplicationClaimTypes.TenantName); + } + public static string? GetTenantId(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ApplicationClaimTypes.TenantId); + { + return claimsPrincipal.FindFirstValue(ApplicationClaimTypes.TenantId); + } + public static bool GetStatus(this ClaimsPrincipal claimsPrincipal) - => Convert.ToBoolean(claimsPrincipal.FindFirstValue(ApplicationClaimTypes.Status)); + { + return Convert.ToBoolean(claimsPrincipal.FindFirstValue(ApplicationClaimTypes.Status)); + } + public static string? GetAssignRoles(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ApplicationClaimTypes.AssignedRoles); - public static string[]? GetRoles(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.Claims.Where(x => x.Type == ClaimTypes.Role).Select(x => x.Value).ToArray(); -} + { + return claimsPrincipal.FindFirstValue(ApplicationClaimTypes.AssignedRoles); + } + public static string[]? GetRoles(this ClaimsPrincipal claimsPrincipal) + { + return claimsPrincipal.Claims.Where(x => x.Type == ClaimTypes.Role).Select(x => x.Value).ToArray(); + } +} \ No newline at end of file diff --git a/src/Infrastructure/Extensions/IdentityResultExtensions.cs b/src/Infrastructure/Extensions/IdentityResultExtensions.cs index c23ef8db1..03b2f5e9b 100644 --- a/src/Infrastructure/Extensions/IdentityResultExtensions.cs +++ b/src/Infrastructure/Extensions/IdentityResultExtensions.cs @@ -11,4 +11,4 @@ public static Result ToApplicationResult(this IdentityResult result) ? Result.Success() : Result.Failure(result.Errors.Select(e => e.Description).ToArray()); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Extensions/SerilogExtensions.cs b/src/Infrastructure/Extensions/SerilogExtensions.cs index c623a55f5..728bb4f2c 100644 --- a/src/Infrastructure/Extensions/SerilogExtensions.cs +++ b/src/Infrastructure/Extensions/SerilogExtensions.cs @@ -25,7 +25,7 @@ public static void RegisterSerilog(this WebApplicationBuilder builder) .MinimumLevel.Override("Microsoft", LogEventLevel.Error) .MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Error) .MinimumLevel.Override("MudBlazor", LogEventLevel.Information) - .MinimumLevel.Override("Serilog", LogEventLevel.Error) + .MinimumLevel.Override("Serilog", LogEventLevel.Information) .MinimumLevel.Override("Microsoft.EntityFrameworkCore.AddOrUpdate", LogEventLevel.Error) .MinimumLevel.Override("Hangfire.BackgroundJobServer", LogEventLevel.Error) .MinimumLevel.Override("Hangfire.Server.BackgroundServerProcess", LogEventLevel.Error) @@ -65,7 +65,7 @@ private static void WriteToDatabase(LoggerConfiguration serilogConfig, IConfigur WriteToNpgsql(serilogConfig, connectionString); break; case DbProviderKeys.SqLite: - WriteToSqLite(serilogConfig, connectionString); + WriteToSqLite(serilogConfig, "BlazorDashboardDb.db"); break; } } @@ -77,7 +77,6 @@ private static void EnrichWithClientInfo(LoggerConfiguration serilogConfig, ICon if (privacySettings == null) return; if (privacySettings.LogClientIpAddresses) serilogConfig.Enrich.WithClientIp(); if (privacySettings.LogClientAgents) serilogConfig.Enrich.WithRequestHeader("User-Agent"); - } private static void WriteToSqlServer(LoggerConfiguration serilogConfig, string? connectionString) @@ -140,22 +139,22 @@ private static void WriteToNpgsql(LoggerConfiguration serilogConfig, string? con { if (string.IsNullOrEmpty(connectionString)) return; - const string tableName = "Loggers"; + const string tableName = "loggers"; //Used columns (Key is a column name) //Column type is writer's constructor parameter IDictionary columnOptions = new Dictionary { - { "Message", new RenderedMessageColumnWriter(NpgsqlDbType.Text) }, - { "MessageTemplate", new MessageTemplateColumnWriter(NpgsqlDbType.Text) }, - { "Level", new LevelColumnWriter(true, NpgsqlDbType.Varchar) }, - { "TimeStamp", new TimestampColumnWriter(NpgsqlDbType.Timestamp) }, - { "Exception", new ExceptionColumnWriter(NpgsqlDbType.Text) }, - { "Properties", new PropertiesColumnWriter(NpgsqlDbType.Varchar) }, - { "LogEvent", new LogEventSerializedColumnWriter(NpgsqlDbType.Varchar) }, - { "UserName", new SinglePropertyColumnWriter("UserName", PropertyWriteMethod.Raw, NpgsqlDbType.Varchar) }, - { "ClientIP", new SinglePropertyColumnWriter("ClientIp", PropertyWriteMethod.Raw, NpgsqlDbType.Varchar) }, + { "message", new RenderedMessageColumnWriter(NpgsqlDbType.Text) }, + { "message_template", new MessageTemplateColumnWriter(NpgsqlDbType.Text) }, + { "level", new LevelColumnWriter(true, NpgsqlDbType.Varchar) }, + { "time_stamp", new TimestampColumnWriter(NpgsqlDbType.Timestamp) }, + { "exception", new ExceptionColumnWriter(NpgsqlDbType.Text) }, + { "properties", new PropertiesColumnWriter(NpgsqlDbType.Varchar) }, + { "log_event", new LogEventSerializedColumnWriter(NpgsqlDbType.Varchar) }, + { "user_name", new SinglePropertyColumnWriter("UserName", PropertyWriteMethod.Raw, NpgsqlDbType.Varchar) }, + { "client_ip", new SinglePropertyColumnWriter("ClientIp", PropertyWriteMethod.Raw, NpgsqlDbType.Varchar) }, { - "ClientAgent", + "client_agent", new SinglePropertyColumnWriter("ClientAgent", PropertyWriteMethod.ToString, NpgsqlDbType.Varchar) } }; @@ -166,20 +165,20 @@ private static void WriteToNpgsql(LoggerConfiguration serilogConfig, string? con LogEventLevel.Information, needAutoCreateTable: false, schemaName: "public", - useCopy: false + useCopy: false, + failureCallback: e => Console.WriteLine($"Sink error: {e.Message}") )); } - private static void WriteToSqLite(LoggerConfiguration serilogConfig, string? connectionString) + private static void WriteToSqLite(LoggerConfiguration serilogConfig, string dbname) { - if (string.IsNullOrEmpty(connectionString)) return; - + var sqlPath = Environment.CurrentDirectory + dbname; const string tableName = "Loggers"; serilogConfig.WriteTo.Async(wt => wt.SQLite( - connectionString, + sqlPath, tableName, LogEventLevel.Information - )); + ).CreateLogger()); } diff --git a/src/Infrastructure/Infrastructure.csproj b/src/Infrastructure/Infrastructure.csproj index 4cd045a03..a63e11cbf 100644 --- a/src/Infrastructure/Infrastructure.csproj +++ b/src/Infrastructure/Infrastructure.csproj @@ -29,14 +29,14 @@ - - + + - + diff --git a/src/Infrastructure/Persistence/ApplicationDbContext.cs b/src/Infrastructure/Persistence/ApplicationDbContext.cs index 1712f95ee..d759c810b 100644 --- a/src/Infrastructure/Persistence/ApplicationDbContext.cs +++ b/src/Infrastructure/Persistence/ApplicationDbContext.cs @@ -3,7 +3,6 @@ using System.Reflection; using CleanArchitecture.Blazor.Domain.Common.Entities; -using CleanArchitecture.Blazor.Domain.Entities; using CleanArchitecture.Blazor.Domain.Identity; namespace CleanArchitecture.Blazor.Infrastructure.Persistence; @@ -15,7 +14,9 @@ public class ApplicationDbContext : IdentityDbContext< ApplicationRoleClaim, ApplicationUserToken>, IApplicationDbContext { public ApplicationDbContext(DbContextOptions options) - : base(options) { } + : base(options) + { + } public DbSet Tenants { get; set; } public DbSet Loggers { get; set; } @@ -38,8 +39,6 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { - } } - } \ No newline at end of file diff --git a/src/Infrastructure/Persistence/ApplicationDbContextInitializer.cs b/src/Infrastructure/Persistence/ApplicationDbContextInitializer.cs index 8593aaa98..67d9a44e9 100644 --- a/src/Infrastructure/Persistence/ApplicationDbContextInitializer.cs +++ b/src/Infrastructure/Persistence/ApplicationDbContextInitializer.cs @@ -1,5 +1,4 @@ using System.Reflection; -using CleanArchitecture.Blazor.Domain.Entities; using CleanArchitecture.Blazor.Domain.Identity; using CleanArchitecture.Blazor.Infrastructure.Constants.ClaimTypes; using CleanArchitecture.Blazor.Infrastructure.Constants.Permission; @@ -7,28 +6,30 @@ using CleanArchitecture.Blazor.Infrastructure.Constants.User; namespace CleanArchitecture.Blazor.Infrastructure.Persistence; + public class ApplicationDbContextInitializer { - private readonly ILogger _logger; private readonly ApplicationDbContext _context; - private readonly UserManager _userManager; + private readonly ILogger _logger; private readonly RoleManager _roleManager; + private readonly UserManager _userManager; - public ApplicationDbContextInitializer(ILogger logger, ApplicationDbContext context, UserManager userManager, RoleManager roleManager) + public ApplicationDbContextInitializer(ILogger logger, + ApplicationDbContext context, UserManager userManager, + RoleManager roleManager) { _logger = logger; _context = context; _userManager = userManager; _roleManager = roleManager; } + public async Task InitialiseAsync() { try { if (_context.Database.IsSqlServer() || _context.Database.IsNpgsql() || _context.Database.IsSqlite()) - { await _context.Database.MigrateAsync(); - } } catch (Exception ex) { @@ -36,6 +37,7 @@ public async Task InitialiseAsync() throw; } } + public async Task SeedAsync() { try @@ -49,6 +51,7 @@ public async Task SeedAsync() throw; } } + private static IEnumerable GetAllPermissions() { var allPermissions = new List(); @@ -81,7 +84,6 @@ private async Task TrySeedAsync() _context.Tenants.Add(new Tenant { Name = "Master", Description = "Master Site" }); _context.Tenants.Add(new Tenant { Name = "Slave", Description = "Slave Site" }); await _context.SaveChangesAsync(); - } // Default roles @@ -93,22 +95,33 @@ private async Task TrySeedAsync() await _roleManager.CreateAsync(administratorRole); foreach (var permission in permissions) - { - await _roleManager.AddClaimAsync(administratorRole, new Claim(ApplicationClaimTypes.Permission, permission)); - } + await _roleManager.AddClaimAsync(administratorRole, + new Claim(ApplicationClaimTypes.Permission, permission)); } + if (_roleManager.Roles.All(r => r.Name != userRole.Name)) { await _roleManager.CreateAsync(userRole); foreach (var permission in permissions) - { if (permission.StartsWith("Permissions.Products")) await _roleManager.AddClaimAsync(userRole, new Claim(ApplicationClaimTypes.Permission, permission)); - } } + // Default users - var administrator = new ApplicationUser { UserName = UserName.Administrator, Provider = "Local", IsActive = true, TenantId = _context.Tenants.First().Id, TenantName = _context.Tenants.First().Name, DisplayName = UserName.Administrator, Email = "new163@163.com", EmailConfirmed = true, ProfilePictureDataUrl = "https://s.gravatar.com/avatar/78be68221020124c23c665ac54e07074?s=80" }; - var demo = new ApplicationUser { UserName = UserName.Demo, IsActive = true, Provider = "Local", TenantId = _context.Tenants.First().Id, TenantName = _context.Tenants.First().Name, DisplayName = UserName.Demo, Email = "neozhu@126.com", EmailConfirmed = true, ProfilePictureDataUrl = "https://s.gravatar.com/avatar/ea753b0b0f357a41491408307ade445e?s=80" }; + var administrator = new ApplicationUser + { + UserName = UserName.Administrator, Provider = "Local", IsActive = true, + TenantId = _context.Tenants.First().Id, TenantName = _context.Tenants.First().Name, + DisplayName = UserName.Administrator, Email = "new163@163.com", EmailConfirmed = true, + ProfilePictureDataUrl = "https://s.gravatar.com/avatar/78be68221020124c23c665ac54e07074?s=80" + }; + var demo = new ApplicationUser + { + UserName = UserName.Demo, IsActive = true, Provider = "Local", TenantId = _context.Tenants.First().Id, + TenantName = _context.Tenants.First().Name, DisplayName = UserName.Demo, Email = "neozhu@126.com", + EmailConfirmed = true, + ProfilePictureDataUrl = "https://s.gravatar.com/avatar/ea753b0b0f357a41491408307ade445e?s=80" + }; if (_userManager.Users.All(u => u.UserName != administrator.UserName)) @@ -116,6 +129,7 @@ private async Task TrySeedAsync() await _userManager.CreateAsync(administrator, UserName.DefaultPassword); await _userManager.AddToRolesAsync(administrator, new[] { administratorRole.Name! }); } + if (_userManager.Users.All(u => u.UserName != demo.UserName)) { await _userManager.CreateAsync(demo, UserName.DefaultPassword); @@ -126,29 +140,65 @@ private async Task TrySeedAsync() // Seed, if necessary if (!_context.KeyValues.Any()) { - _context.KeyValues.Add(new KeyValue { Name = Picklist.Status, Value = "initialization", Text = "initialization", Description = "Status of workflow" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Status, Value = "processing", Text = "processing", Description = "Status of workflow" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Status, Value = "pending", Text = "pending", Description = "Status of workflow" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Status, Value = "finished", Text = "finished", Description = "Status of workflow" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Brand, Value = "Apple", Text = "Apple", Description = "Brand of production" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Brand, Value = "MI", Text = "MI", Description = "Brand of production" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Brand, Value = "Logitech", Text = "Logitech", Description = "Brand of production" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Brand, Value = "Linksys", Text = "Linksys", Description = "Brand of production" }); - - _context.KeyValues.Add(new KeyValue { Name = Picklist.Unit, Value = "EA", Text = "EA", Description = "Unit of product" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Unit, Value = "KM", Text = "KM", Description = "Unit of product" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Unit, Value = "PC", Text = "PC", Description = "Unit of product" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Unit, Value = "KG", Text = "KG", Description = "Unit of product" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Unit, Value = "ST", Text = "ST", Description = "Unit of product" }); + _context.KeyValues.Add(new KeyValue + { + Name = Picklist.Status, Value = "initialization", Text = "initialization", + Description = "Status of workflow" + }); + _context.KeyValues.Add(new KeyValue + { + Name = Picklist.Status, Value = "processing", Text = "processing", Description = "Status of workflow" + }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Status, Value = "pending", Text = "pending", Description = "Status of workflow" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Status, Value = "finished", Text = "finished", Description = "Status of workflow" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Brand, Value = "Apple", Text = "Apple", Description = "Brand of production" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Brand, Value = "MI", Text = "MI", Description = "Brand of production" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Brand, Value = "Logitech", Text = "Logitech", Description = "Brand of production" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Brand, Value = "Linksys", Text = "Linksys", Description = "Brand of production" }); + + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Unit, Value = "EA", Text = "EA", Description = "Unit of product" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Unit, Value = "KM", Text = "KM", Description = "Unit of product" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Unit, Value = "PC", Text = "PC", Description = "Unit of product" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Unit, Value = "KG", Text = "KG", Description = "Unit of product" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Unit, Value = "ST", Text = "ST", Description = "Unit of product" }); await _context.SaveChangesAsync(); - } + if (!_context.Products.Any()) { - _context.Products.Add(new Product { Brand = "Apple", Name = "IPhone 13 Pro", Description = "Apple iPhone 13 Pro smartphone. Announced Sep 2021. Features 6.1″ display, Apple A15 Bionic chipset, 3095 mAh battery, 1024 GB storage.", Unit = "EA", Price = 999.98m }); - _context.Products.Add(new Product { Brand = "MI", Name = "MI 12 Pro", Description = "Xiaomi 12 Pro Android smartphone. Announced Dec 2021. Features 6.73″ display, Snapdragon 8 Gen 1 chipset, 4600 mAh battery, 256 GB storage.", Unit = "EA", Price = 199.00m }); - _context.Products.Add(new Product { Brand = "Logitech", Name = "MX KEYS Mini", Description = "Logitech MX Keys Mini Introducing MX Keys Mini – a smaller, smarter, and mightier keyboard made for creators. Type with confidence on a keyboard crafted for efficiency, stability, and...", Unit = "PA", Price = 99.90m }); + _context.Products.Add(new Product + { + Brand = "Apple", Name = "IPhone 13 Pro", + Description = + "Apple iPhone 13 Pro smartphone. Announced Sep 2021. Features 6.1″ display, Apple A15 Bionic chipset, 3095 mAh battery, 1024 GB storage.", + Unit = "EA", Price = 999.98m + }); + _context.Products.Add(new Product + { + Brand = "MI", Name = "MI 12 Pro", + Description = + "Xiaomi 12 Pro Android smartphone. Announced Dec 2021. Features 6.73″ display, Snapdragon 8 Gen 1 chipset, 4600 mAh battery, 256 GB storage.", + Unit = "EA", Price = 199.00m + }); + _context.Products.Add(new Product + { + Brand = "Logitech", Name = "MX KEYS Mini", + Description = + "Logitech MX Keys Mini Introducing MX Keys Mini – a smaller, smarter, and mightier keyboard made for creators. Type with confidence on a keyboard crafted for efficiency, stability, and...", + Unit = "PA", Price = 99.90m + }); await _context.SaveChangesAsync(); } } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/BlazorContextFactory.cs b/src/Infrastructure/Persistence/BlazorContextFactory.cs index 43aa76ca0..797463d05 100644 --- a/src/Infrastructure/Persistence/BlazorContextFactory.cs +++ b/src/Infrastructure/Persistence/BlazorContextFactory.cs @@ -1,21 +1,20 @@ namespace CleanArchitecture.Blazor.Infrastructure.Persistence; + public class BlazorContextFactory : IDbContextFactory where TContext : DbContext { private readonly IServiceProvider _provider; public BlazorContextFactory(IServiceProvider provider) { - this._provider = provider; + _provider = provider; } public TContext CreateDbContext() { if (_provider == null) - { throw new InvalidOperationException( - $"You must configure an instance of IServiceProvider"); - } + "You must configure an instance of IServiceProvider"); return ActivatorUtilities.CreateInstance(_provider); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Configurations/AuditTrailConfiguration.cs b/src/Infrastructure/Persistence/Configurations/AuditTrailConfiguration.cs index bae12a09f..3528ec153 100644 --- a/src/Infrastructure/Persistence/Configurations/AuditTrailConfiguration.cs +++ b/src/Infrastructure/Persistence/Configurations/AuditTrailConfiguration.cs @@ -1,7 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Domain.Entities; using CleanArchitecture.Blazor.Infrastructure.Persistence.Conversions; using Microsoft.EntityFrameworkCore.Metadata.Builders; @@ -13,12 +12,12 @@ public class AuditTrailConfiguration : IEntityTypeConfiguration public void Configure(EntityTypeBuilder builder) { builder.HasOne(x => x.Owner) - .WithMany() - .HasForeignKey(x => x.UserId) - .OnDelete(DeleteBehavior.SetNull); + .WithMany() + .HasForeignKey(x => x.UserId) + .OnDelete(DeleteBehavior.SetNull); builder.Navigation(e => e.Owner).AutoInclude(); builder.Property(t => t.AuditType) - .HasConversion(); + .HasConversion(); builder.Property(e => e.AffectedColumns).HasStringListConversion(); builder.Property(u => u.OldValues).HasJsonConversion(); builder.Property(u => u.NewValues).HasJsonConversion(); @@ -26,4 +25,4 @@ public void Configure(EntityTypeBuilder builder) builder.Ignore(x => x.TemporaryProperties); builder.Ignore(x => x.HasTemporaryProperties); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Configurations/CustomerConfiguration.cs b/src/Infrastructure/Persistence/Configurations/CustomerConfiguration.cs index 09709f915..75089e3d5 100644 --- a/src/Infrastructure/Persistence/Configurations/CustomerConfiguration.cs +++ b/src/Infrastructure/Persistence/Configurations/CustomerConfiguration.cs @@ -13,6 +13,4 @@ public void Configure(EntityTypeBuilder builder) builder.Property(t => t.Name).HasMaxLength(50).IsRequired(); builder.Ignore(e => e.DomainEvents); } -} - - +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Configurations/DocumentConfiguration.cs b/src/Infrastructure/Persistence/Configurations/DocumentConfiguration.cs index a3485765a..0dcc30707 100644 --- a/src/Infrastructure/Persistence/Configurations/DocumentConfiguration.cs +++ b/src/Infrastructure/Persistence/Configurations/DocumentConfiguration.cs @@ -13,14 +13,14 @@ public void Configure(EntityTypeBuilder builder) builder.Property(t => t.DocumentType).HasConversion(); builder.Ignore(e => e.DomainEvents); builder.HasOne(x => x.Owner) - .WithMany() - .HasForeignKey(x => x.CreatedBy) - .OnDelete(DeleteBehavior.Restrict); + .WithMany() + .HasForeignKey(x => x.CreatedBy) + .OnDelete(DeleteBehavior.Restrict); builder.HasOne(x => x.Editor) - .WithMany() - .HasForeignKey(x => x.LastModifiedBy) - .OnDelete(DeleteBehavior.Restrict); + .WithMany() + .HasForeignKey(x => x.LastModifiedBy) + .OnDelete(DeleteBehavior.Restrict); builder.Navigation(e => e.Owner).AutoInclude(); builder.Navigation(e => e.Editor).AutoInclude(); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Configurations/IdentityUserConfiguration.cs b/src/Infrastructure/Persistence/Configurations/IdentityUserConfiguration.cs index 381a95927..39957e77f 100644 --- a/src/Infrastructure/Persistence/Configurations/IdentityUserConfiguration.cs +++ b/src/Infrastructure/Persistence/Configurations/IdentityUserConfiguration.cs @@ -37,61 +37,61 @@ public void Configure(EntityTypeBuilder builder) } } - public class ApplicationRoleClaimConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasOne(d => d.Role) - .WithMany(p => p.RoleClaims) - .HasForeignKey(d => d.RoleId) - .OnDelete(DeleteBehavior.Cascade); + .WithMany(p => p.RoleClaims) + .HasForeignKey(d => d.RoleId) + .OnDelete(DeleteBehavior.Cascade); } } + public class ApplicationUserRoleConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasOne(d => d.Role) - .WithMany(p => p.UserRoles) - .HasForeignKey(d => d.RoleId) - .OnDelete(DeleteBehavior.Cascade); + .WithMany(p => p.UserRoles) + .HasForeignKey(d => d.RoleId) + .OnDelete(DeleteBehavior.Cascade); builder.HasOne(d => d.User) - .WithMany(p => p.UserRoles) - .HasForeignKey(d => d.UserId) - .OnDelete(DeleteBehavior.Cascade); + .WithMany(p => p.UserRoles) + .HasForeignKey(d => d.UserId) + .OnDelete(DeleteBehavior.Cascade); } } + public class ApplicationUserClaimConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasOne(d => d.User) - .WithMany(p => p.UserClaims) - .HasForeignKey(d => d.UserId) - .OnDelete(DeleteBehavior.Cascade); - + .WithMany(p => p.UserClaims) + .HasForeignKey(d => d.UserId) + .OnDelete(DeleteBehavior.Cascade); } } + public class ApplicationUserLoginConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasOne(d => d.User) - .WithMany(p => p.Logins) - .HasForeignKey(d => d.UserId) - .OnDelete(DeleteBehavior.Cascade); - + .WithMany(p => p.Logins) + .HasForeignKey(d => d.UserId) + .OnDelete(DeleteBehavior.Cascade); } } + public class ApplicationUserTokenConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasOne(d => d.User) - .WithMany(p => p.Tokens) - .HasForeignKey(d => d.UserId) - .OnDelete(DeleteBehavior.Cascade); - + .WithMany(p => p.Tokens) + .HasForeignKey(d => d.UserId) + .OnDelete(DeleteBehavior.Cascade); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Configurations/KeyValueConfiguration.cs b/src/Infrastructure/Persistence/Configurations/KeyValueConfiguration.cs index c71aa539f..0afd60cba 100644 --- a/src/Infrastructure/Persistence/Configurations/KeyValueConfiguration.cs +++ b/src/Infrastructure/Persistence/Configurations/KeyValueConfiguration.cs @@ -13,4 +13,4 @@ public void Configure(EntityTypeBuilder builder) builder.Property(t => t.Name).HasConversion(); builder.Ignore(e => e.DomainEvents); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Configurations/TenantConfiguration.cs b/src/Infrastructure/Persistence/Configurations/TenantConfiguration.cs index c4c29e9a8..504e92ee2 100644 --- a/src/Infrastructure/Persistence/Configurations/TenantConfiguration.cs +++ b/src/Infrastructure/Persistence/Configurations/TenantConfiguration.cs @@ -1,7 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Domain.Entities; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace CleanArchitecture.Blazor.Infrastructure.Persistence.Configurations; @@ -12,4 +11,4 @@ public void Configure(EntityTypeBuilder builder) { //builder.Ignore(e => e.DomainEvents); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Conversions/ValueConversionExtensions.cs b/src/Infrastructure/Persistence/Conversions/ValueConversionExtensions.cs index 7fe41db04..5f93c35ae 100644 --- a/src/Infrastructure/Persistence/Conversions/ValueConversionExtensions.cs +++ b/src/Infrastructure/Persistence/Conversions/ValueConversionExtensions.cs @@ -10,14 +10,18 @@ public static class ValueConversionExtensions { public static PropertyBuilder HasJsonConversion(this PropertyBuilder propertyBuilder) { - ValueConverter converter = new ValueConverter( + var converter = new ValueConverter( v => JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options), - v => string.IsNullOrEmpty(v)? default: JsonSerializer.Deserialize(v, DefaultJsonSerializerOptions.Options)); + v => string.IsNullOrEmpty(v) + ? default + : JsonSerializer.Deserialize(v, DefaultJsonSerializerOptions.Options)); - ValueComparer comparer = new ValueComparer( - (l, r) => JsonSerializer.Serialize(l, DefaultJsonSerializerOptions.Options) == JsonSerializer.Serialize(r, DefaultJsonSerializerOptions.Options), + var comparer = new ValueComparer( + (l, r) => JsonSerializer.Serialize(l, DefaultJsonSerializerOptions.Options) == + JsonSerializer.Serialize(r, DefaultJsonSerializerOptions.Options), v => v == null ? 0 : JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options).GetHashCode(), - v => JsonSerializer.Deserialize(JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options), DefaultJsonSerializerOptions.Options)); + v => JsonSerializer.Deserialize(JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options), + DefaultJsonSerializerOptions.Options)); propertyBuilder.HasConversion(converter); propertyBuilder.Metadata.SetValueConverter(converter); @@ -25,20 +29,26 @@ public static PropertyBuilder HasJsonConversion(this PropertyBuilder pr return propertyBuilder; } - public static PropertyBuilder> HasStringListConversion(this PropertyBuilder> propertyBuilder) + public static PropertyBuilder> HasStringListConversion( + this PropertyBuilder> propertyBuilder) { - ValueConverter, String> converter = new ValueConverter, String>( - v => JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options), - v => string.IsNullOrEmpty(v) ? default : JsonSerializer.Deserialize>(v, DefaultJsonSerializerOptions.Options)); + var converter = new ValueConverter, string>( + v => JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options), + v => string.IsNullOrEmpty(v) + ? default + : JsonSerializer.Deserialize>(v, DefaultJsonSerializerOptions.Options)); - ValueComparer> comparer = new ValueComparer>( - (l, r) => JsonSerializer.Serialize(l, DefaultJsonSerializerOptions.Options) == JsonSerializer.Serialize(r, DefaultJsonSerializerOptions.Options), + var comparer = new ValueComparer>( + (l, r) => JsonSerializer.Serialize(l, DefaultJsonSerializerOptions.Options) == + JsonSerializer.Serialize(r, DefaultJsonSerializerOptions.Options), v => v == null ? 0 : JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options).GetHashCode(), - v => JsonSerializer.Deserialize>(JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options), DefaultJsonSerializerOptions.Options)); + v => JsonSerializer.Deserialize>( + JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options), + DefaultJsonSerializerOptions.Options)); propertyBuilder.HasConversion(converter); propertyBuilder.Metadata.SetValueConverter(converter); propertyBuilder.Metadata.SetValueComparer(comparer); return propertyBuilder; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Extensions/ModelBuilderExtensions.cs b/src/Infrastructure/Persistence/Extensions/ModelBuilderExtensions.cs index 93beab9cc..6b01cbd51 100644 --- a/src/Infrastructure/Persistence/Extensions/ModelBuilderExtensions.cs +++ b/src/Infrastructure/Persistence/Extensions/ModelBuilderExtensions.cs @@ -8,7 +8,8 @@ namespace CleanArchitecture.Blazor.Infrastructure.Persistence.Extensions; public static class ModelBuilderExtensions { - public static void ApplyGlobalFilters(this ModelBuilder modelBuilder, Expression> expression) + public static void ApplyGlobalFilters(this ModelBuilder modelBuilder, + Expression> expression) { var entities = modelBuilder.Model .GetEntityTypes() @@ -21,4 +22,4 @@ public static void ApplyGlobalFilters(this ModelBuilder modelBuilder modelBuilder.Entity(entity).HasQueryFilter(Expression.Lambda(newBody, newParam)); } } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Interceptors/AuditableEntityInterceptor.cs b/src/Infrastructure/Persistence/Interceptors/AuditableEntityInterceptor.cs index 205ff95d8..dbefcc283 100644 --- a/src/Infrastructure/Persistence/Interceptors/AuditableEntityInterceptor.cs +++ b/src/Infrastructure/Persistence/Interceptors/AuditableEntityInterceptor.cs @@ -1,6 +1,5 @@ using CleanArchitecture.Blazor.Application.Common.Interfaces.MultiTenant; using CleanArchitecture.Blazor.Domain.Common.Entities; -using CleanArchitecture.Blazor.Domain.Entities; using MediatR; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -9,14 +8,15 @@ namespace CleanArchitecture.Blazor.Infrastructure.Persistence.Interceptors; #nullable disable warnings public class AuditableEntityInterceptor : SaveChangesInterceptor { - private readonly ITenantProvider _tenantProvider; private readonly ICurrentUserService _currentUserService; private readonly IDateTime _dateTime; + private readonly ITenantProvider _tenantProvider; private List _temporaryAuditTrailList = new(); + public AuditableEntityInterceptor( ITenantProvider tenantProvider, ICurrentUserService currentUserService, - IMediator mediator, + IMediator mediator, IDateTime dateTime) { _tenantProvider = tenantProvider; @@ -24,38 +24,34 @@ public AuditableEntityInterceptor( _dateTime = dateTime; } - public override async ValueTask> SavingChangesAsync(DbContextEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) + public override async ValueTask> SavingChangesAsync(DbContextEventData eventData, + InterceptionResult result, CancellationToken cancellationToken = default) { - UpdateEntities(eventData.Context!); _temporaryAuditTrailList = TryInsertTemporaryAuditTrail(eventData.Context!, cancellationToken); return await base.SavingChangesAsync(eventData, result, cancellationToken); } - public override async ValueTask SavedChangesAsync(SaveChangesCompletedEventData eventData, int result, CancellationToken cancellationToken = default) + + public override async ValueTask SavedChangesAsync(SaveChangesCompletedEventData eventData, int result, + CancellationToken cancellationToken = default) { var resultValueTask = await base.SavedChangesAsync(eventData, result, cancellationToken); await TryUpdateTemporaryPropertiesForAuditTrail(eventData.Context!, cancellationToken).ConfigureAwait(false); return resultValueTask; } + private void UpdateEntities(DbContext context) { var userId = _currentUserService.UserId; var tenantId = _tenantProvider.TenantId; foreach (var entry in context.ChangeTracker.Entries()) - { switch (entry.State) { case EntityState.Added: entry.Entity.CreatedBy = userId; entry.Entity.Created = _dateTime.Now; - if (entry.Entity is IMustHaveTenant mustTenant) - { - mustTenant.TenantId = tenantId; - } - if (entry.Entity is IMayHaveTenant mayTenant) - { - mayTenant.TenantId = tenantId; - } + if (entry.Entity is IMustHaveTenant mustTenant) mustTenant.TenantId = tenantId; + if (entry.Entity is IMayHaveTenant mayTenant) mayTenant.TenantId = tenantId; break; case EntityState.Modified: @@ -69,6 +65,7 @@ private void UpdateEntities(DbContext context) softDelete.Deleted = _dateTime.Now; entry.State = EntityState.Modified; } + break; case EntityState.Unchanged: if (entry.HasChangedOwnedEntities()) @@ -76,14 +73,14 @@ private void UpdateEntities(DbContext context) entry.Entity.LastModifiedBy = userId; entry.Entity.LastModified = _dateTime.Now; } + break; } - } } - private List TryInsertTemporaryAuditTrail(DbContext context, CancellationToken cancellationToken = default) + private List TryInsertTemporaryAuditTrail(DbContext context, + CancellationToken cancellationToken = default) { - var userId = _currentUserService.UserId; var tenantId = _tenantProvider.TenantId; context.ChangeTracker.DetectChanges(); @@ -95,24 +92,24 @@ private List TryInsertTemporaryAuditTrail(DbContext context, Cancell entry.State == EntityState.Unchanged) continue; - var auditEntry = new AuditTrail() + var auditEntry = new AuditTrail { TableName = entry.Entity.GetType().Name, UserId = userId, DateTime = _dateTime.Now, AffectedColumns = new List(), - NewValues = new(), - OldValues = new(), + NewValues = new Dictionary(), + OldValues = new Dictionary() }; foreach (var property in entry.Properties) { - if (property.IsTemporary) { auditEntry.TemporaryProperties.Add(property); continue; } - string propertyName = property.Metadata.Name; + + var propertyName = property.Metadata.Name; if (property.Metadata.IsPrimaryKey() && property.CurrentValue is not null) { auditEntry.PrimaryKey[propertyName] = property.CurrentValue; @@ -124,55 +121,46 @@ private List TryInsertTemporaryAuditTrail(DbContext context, Cancell case EntityState.Added: auditEntry.AuditType = AuditType.Create; if (property.CurrentValue is not null) - { auditEntry.NewValues[propertyName] = property.CurrentValue; - } break; case EntityState.Deleted: auditEntry.AuditType = AuditType.Delete; if (property.OriginalValue is not null) - { auditEntry.OldValues[propertyName] = property.OriginalValue; - } break; - case EntityState.Modified when property.IsModified && ((property.OriginalValue is null && property.CurrentValue is not null) || (property.OriginalValue is not null && property.OriginalValue.Equals(property.CurrentValue) == false)): + case EntityState.Modified when property.IsModified && + ((property.OriginalValue is null && + property.CurrentValue is not null) || + (property.OriginalValue is not null && + property.OriginalValue.Equals(property.CurrentValue) == false)): auditEntry.AffectedColumns.Add(propertyName); auditEntry.AuditType = AuditType.Update; auditEntry.OldValues[propertyName] = property.OriginalValue; if (property.CurrentValue is not null) - { auditEntry.NewValues[propertyName] = property.CurrentValue; - } break; - } } + temporaryAuditEntries.Add(auditEntry); } + return temporaryAuditEntries; } - private async Task TryUpdateTemporaryPropertiesForAuditTrail(DbContext context, CancellationToken cancellationToken = default) + private async Task TryUpdateTemporaryPropertiesForAuditTrail(DbContext context, + CancellationToken cancellationToken = default) { if (_temporaryAuditTrailList.Any()) { foreach (var auditEntry in _temporaryAuditTrailList) - { - foreach (var prop in auditEntry.TemporaryProperties) - { - if (prop.Metadata.IsPrimaryKey() && prop.CurrentValue is not null) - { - auditEntry.PrimaryKey[prop.Metadata.Name] = prop.CurrentValue; - } - else if (auditEntry.NewValues is not null && prop.CurrentValue is not null) - { - auditEntry.NewValues[prop.Metadata.Name] = prop.CurrentValue; - } - } - - } + foreach (var prop in auditEntry.TemporaryProperties) + if (prop.Metadata.IsPrimaryKey() && prop.CurrentValue is not null) + auditEntry.PrimaryKey[prop.Metadata.Name] = prop.CurrentValue; + else if (auditEntry.NewValues is not null && prop.CurrentValue is not null) + auditEntry.NewValues[prop.Metadata.Name] = prop.CurrentValue; await context.AddRangeAsync(_temporaryAuditTrailList); await context.SaveChangesAsync(cancellationToken).ConfigureAwait(false); _temporaryAuditTrailList.Clear(); @@ -182,9 +170,11 @@ private async Task TryUpdateTemporaryPropertiesForAuditTrail(DbContext context, public static class Extensions { - public static bool HasChangedOwnedEntities(this EntityEntry entry) => - entry.References.Any(r => + public static bool HasChangedOwnedEntities(this EntityEntry entry) + { + return entry.References.Any(r => r.TargetEntry != null && r.TargetEntry.Metadata.IsOwned() && (r.TargetEntry.State == EntityState.Added || r.TargetEntry.State == EntityState.Modified)); + } } \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Interceptors/DispatchDomainEventsInterceptor.cs b/src/Infrastructure/Persistence/Interceptors/DispatchDomainEventsInterceptor.cs index 6adede382..40c35768b 100644 --- a/src/Infrastructure/Persistence/Interceptors/DispatchDomainEventsInterceptor.cs +++ b/src/Infrastructure/Persistence/Interceptors/DispatchDomainEventsInterceptor.cs @@ -3,6 +3,7 @@ using Microsoft.EntityFrameworkCore.Diagnostics; namespace CleanArchitecture.Blazor.Infrastructure.Persistence.Interceptors; + public class DispatchDomainEventsInterceptor : SaveChangesInterceptor { private readonly IMediator _mediator; @@ -12,24 +13,28 @@ public DispatchDomainEventsInterceptor(IMediator mediator) _mediator = mediator; } - public override async ValueTask> SavingChangesAsync(DbContextEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) + public override async ValueTask> SavingChangesAsync(DbContextEventData eventData, + InterceptionResult result, CancellationToken cancellationToken = default) { await DispatchDomainEventsForDelete(eventData.Context); return await base.SavingChangesAsync(eventData, result, cancellationToken); } - public override async ValueTask SavedChangesAsync(SaveChangesCompletedEventData eventData, int result, CancellationToken cancellationToken = default) + + public override async ValueTask SavedChangesAsync(SaveChangesCompletedEventData eventData, int result, + CancellationToken cancellationToken = default) { var resultValueTask = await base.SavedChangesAsync(eventData, result, cancellationToken); await DispatchDomainEventsForChanged(eventData.Context); return resultValueTask; } + public async Task DispatchDomainEventsForDelete(DbContext? context) { if (context == null) return; var entities = context.ChangeTracker .Entries() - .Where(e => e.Entity.DomainEvents.Any() && e.State== EntityState.Deleted) + .Where(e => e.Entity.DomainEvents.Any() && e.State == EntityState.Deleted) .Select(e => e.Entity); var domainEvents = entities @@ -41,6 +46,7 @@ public async Task DispatchDomainEventsForDelete(DbContext? context) foreach (var domainEvent in domainEvents) await _mediator.Publish(domainEvent); } + public async Task DispatchDomainEventsForChanged(DbContext? context) { if (context == null) return; @@ -59,5 +65,4 @@ public async Task DispatchDomainEventsForChanged(DbContext? context) foreach (var domainEvent in domainEvents) await _mediator.Publish(domainEvent); } -} - +} \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.ca-ES.resx b/src/Infrastructure/Resources/Constants/ConstantString.ca-ES.resx index 997119deb..0a19460d9 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.ca-ES.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.ca-ES.resx @@ -1,288 +1,294 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Confirmació de tancar de sessió - + Accions - + Afegir - + Búsqueda Avançada - + Està segur que vol eliminar els elements seleccionats: {0}? - + Està segur que vol eliminar aquest element amb Id: {0}? - + Està segur que vol eliminar aquest element: {0}? - + Cancel·lar - + Netejar - + Tancar - + Nou - + Crear un nou {0} - + Creat amb èxit - + Eliminar - + Confirmació d'eliminar - + Eliminar elements seleccionats: {0} - + Eliminat amb èxi - + Eliminar el {0} - + Descarregant... - + Editar - + Editar el {0} - + Error al exportar - + Exportat amb èxit - + Exportar a Excel - + Importació fallida - + Importar desde Excel - + Importat correctament - + Carregant... - + Error d'inici de sessió - + Inici de sessió amb èxit - + Tancar sessió - + Error al tancar la sessió - + Sessió tancada amb èxit - + Pròxim - + No - + No permés - + D'ACORD - + ordenar per - + Anterior - + Actualizar - + Reinicialitzar - + Guardar - + Guardar canvis - + Guardat amb èxit - + Búsqueda - + Iniciar sessió amb {0} - + Actualizat correctament - + Carregant... - + Si - + Confirmar - + Esteu provant de tancar la sessió de l'aplicació. Realment voleu tancar la sessió? - + Registrar-se - + Export to PDF - + Presentar - + Clonar - + Desa i nou \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.de-DE.resx b/src/Infrastructure/Resources/Constants/ConstantString.de-DE.resx index e255dd5c2..1b9ad9f74 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.de-DE.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.de-DE.resx @@ -1,288 +1,294 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Abmeldebestätigung - + Aktionen - + Hinzufügen - + Erweiterte Suche - + Möchten Sie die ausgewählten Elemente wirklich löschen: {0}? - + Möchten Sie dieses Element mit der ID: {0} wirklich löschen? - + Möchten Sie dieses Element wirklich löschen: {0}? - + Absagen - + Klar - + Schließen - + Neu - + Erstellen Sie ein neues {0} - + Erfolgreich erstellen - + Löschen - + Bestätigung löschen - + Ausgewählte Elemente löschen: {0} - + Erfolgreich löschen - + Löschen Sie die {0} - + Wird heruntergeladen... - + Bearbeiten - + Bearbeiten Sie die {0} - + Export fehlgeschlagen - + Export erfolgreich - + Nach Excel exportieren - + Import fehlgeschlagen - + Aus Excel importieren - + Import erfolgreich - + Wird geladen... - + Login gescheitert - + Anmeldung erfolgreich - + Ausloggen - + Abmeldung fehlgeschlagen - + Abmeldung erfolgreich - + Nächste - + Nein - + Nicht erlaubt - + OK - + Sortieren nach - + Bisherige - + Aktualisierung - + Zurücksetzen - + Speichern - + Änderungen speichern - + Erfolgreich gespeichert - + Suche - + Melden Sie sich mit {0} an - + Update erfolgreich - + Hochladen... - + Ja - + Bestätigen - + Sie versuchen, sich von der Anwendung abzumelden. Möchten Sie sich wirklich abmelden? - + Einloggen - + Als PDF exportieren - + Soumettre - + Klon - + Speichern und neu \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.en.resx b/src/Infrastructure/Resources/Constants/ConstantString.en.resx index 01fae4c4f..e99e8cab1 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.en.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.en.resx @@ -1,294 +1,300 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Logout Confirmation - + Actions - + Add - + Advanced Search - + Are you sure you want to delete the selected items: {0}? - + Are you sure you want to delete this item with Id: {0}? - + Are you sure you want to delete this item: {0}? - + Cancel - + Clear - + Close - + New - + Create a new {0} - + Create successfully - + Delete - + Delete Confirmation - + Delete selected items: {0} - + Delete successfully - + Delete the {0} - + Downloading... - + Edit - + Edit the {0} - + Export fail - + Export successfully - + Export to Excel - + Import fail - + Import from Excel - + Import successfully - + Loading... - + Login fail - + Login successfully - + Logout - + Logout fail - + Logout successfully - + Next - + No - + No Allowed - + OK - + Order By - + Previous - + Refresh - + Reset - + Save - + Save Changes - + Save successfully - + Search - + Sign in with {0} - + Update successfully - + Uploading... - + Yes - + Confirm - + You are attempting to log out of application. Do you really want to log out? - + Sign In - + Export to PDF - + Submit - + Clone - + Save & New - + Selected - + Selected Total \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.es-ES.resx b/src/Infrastructure/Resources/Constants/ConstantString.es-ES.resx index 04227f578..e8c26ecbf 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.es-ES.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.es-ES.resx @@ -1,288 +1,294 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Confirmación de cierre de sesión - + Comportamiento - + Agregar - + Búsqueda Avanzada - + ¿Está seguro de que desea eliminar los elementos seleccionados: {0}? - + ¿Está seguro de que desea eliminar este elemento con Id: {0}? - + ¿Está seguro de que desea eliminar este elemento: {0}? - + Cancelar - + Claro - + Cerrar - + Nuevo - + Crear un nuevo {0} - + Crear con éxito - + Borrar - + Eliminar Confirmación - + Eliminar elementos seleccionados: {0} - + Eliminar con éxito - + Eliminar el {0} - + Descargando... - + Editar - + Editar el {0} - + Error al exportar - + Exportar con éxito - + Exportar a Excel - + Importación fallida - + Importar desde Excel - + Importar correctamente - + Cargando... - + Carga fallida - + Iniciar sesión con éxito - + Cerrar sesión - + Error de cierre de sesión - + Cerrar sesión con éxito - + próximo - + No - + No permitido - + DE ACUERDO - + ordenar por - + Anterior - + Actualizar - + Reiniciar - + Guardar - + Guardar cambios - + Guardar con éxito - + Búsqueda - + Iniciar sesión con {0} - + Actualizar correctamente - + Subiendo... - + - + Confirmar - + Está intentando cerrar sesión en la aplicación. ¿Realmente quieres cerrar sesión? - + Registrarse - + Exportar a PDF - + Entregar - + Clon - + Guardar y nueva \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.fr-FR.resx b/src/Infrastructure/Resources/Constants/ConstantString.fr-FR.resx index 4f584b211..d79c84056 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.fr-FR.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.fr-FR.resx @@ -1,288 +1,294 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Confirmation de déconnexion - + Actions - + Ajouter - + Recherche Avancée - + Voulez-vous vraiment supprimer les éléments sélectionnés : {0} ? - + Voulez-vous vraiment supprimer cet élément avec l'identifiant : {0} ? - + Voulez-vous vraiment supprimer cet élément : {0} ? - + Annuler - + Dégager - + proche - + Nouvelle - + Créer un nouveau {0} - + Créer avec succès - + Supprimer - + Supprimer la confirmation - + Supprimer les éléments sélectionnés : {0} - + Supprimer avec succès - + Supprimer le {0} - + Téléchargement... - + Modifier - + Modifier le {0} - + Échec de l'exportation - + Exporter avec succès - + Exporter vers Excel - + Échec de l'importation - + Importer depuis Excel - + Importation réussie - + Chargement... - + Échec de la connexion - + Connectez-vous avec succès - + Se déconnecter - + Échec de la déconnexion - + Déconnectez-vous avec succès - + Suivant - + Non - + N'est pas permis - + D'ACCORD - + Commandé par - + Précédent - + Rafraîchir - + Réinitialiser - + Sauver - + Sauvegarder les modifications - + Sauvegarde réussie - + Recherche - + Connectez-vous avec {0} - + Mise à jour réussie - + Téléchargement... - + Oui - + Confirmer - + Vous essayez de vous déconnecter de l’application. Voulez-vous vraiment vous déconnecter? - + S'identifier - + Exporter au format PDF - + Soumettre - + Cloner - + Enregistrer et nouveau \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.ja-JP.resx b/src/Infrastructure/Resources/Constants/ConstantString.ja-JP.resx index 1a0f293a5..a7c81229f 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.ja-JP.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.ja-JP.resx @@ -1,288 +1,294 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + ログアウト確認 - + 行動 - + 追加 - + 高度な検索 - + 選択したアイテムを削除してもよろしいですか:{0}? - + ID:{0}のこのアイテムを削除してもよろしいですか? - + このアイテムを削除してもよろしいですか:{0}? - + キャンセル - + クリア - + 選ぶ - + 新しい - + 新しい{0}を作成します - + 正常に作成 - + 消去 - + 確認を削除 - + 選択したアイテムを削除します:{0} - + 正常に削除 - + {0}を削除します - + ダウンロード中... - + 編集 - + {0}を編集します - + エクスポートに失敗する - + 正常にエクスポート - + Excelにエクスポート - + インポートに失敗する - + Excelからインポート - + 正常にインポート - + 読み込んでいます... - + ログイン失敗 - + 正常にログイン - + ログアウト - + ログアウトに失敗する - + 正常にログアウトします - + - + いいえ - + 許可されていません - + わかった - + 注文者 - + - + 更新 - + リセット - + 保存する - + 変更内容を保存 - + 保存完了 - + 探す - + {0}でサインイン - + 正常に更新 - + アップロード中... - + はい - + 確認する - + アプリケーションからログアウトしようとしています。ログアウトしてもよろしいですか? - + ログイン - + PDFにエクスポート - + 送信 - + クローン - + 保存して新規作成 \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.km-KH.resx b/src/Infrastructure/Resources/Constants/ConstantString.km-KH.resx index 7d4b8c7a2..c394dda29 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.km-KH.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.km-KH.resx @@ -1,288 +1,294 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 로그아웃 확인 - + 행위 - + 추가하다 - + 고급 검색 - + 선택한 항목({0})을 삭제하시겠습니까? - + ID가 {0}인 이 항목을 삭제하시겠습니까? - + 이 항목을 삭제하시겠습니까: {0}? - + 취소 - + 분명한 - + 닫다 - + 새로운 - + 새 {0} 만들기 - + 성공적으로 생성 - + 삭제 - + 삭제 확인 - + 선택한 항목 삭제: {0} - + 성공적으로 삭제 - + {0} 삭제 - + 다운로드 중... - + 편집하다 - + {0} 수정 - + 내보내기 실패 - + 성공적으로 내보내기 - + 엑셀로 내보내기 - + 가져오기 실패 - + 엑셀에서 가져오기 - + 가져오기 성공 - + 로드 중... - + 로그인 실패 - + 로그인 성공 - + 로그 아웃 - + 로그아웃 실패 - + 성공적으로 로그아웃 - + 다음 - + 아니요 - + 허용되지 않음 - + 확인 - + 주문 - + 이전의 - + 새로 고치다 - + 초기화 - + 구하다 - + 변경 사항을 저장하다 - + 성공적으로 저장 - + 검색 - + {0}으로 로그인 - + 업데이트 성공 - + 업로드 중... - + - + បញ្ជាក់ - + អ្នក កំពុង ព្យាយាម log ចេញ ពី កម្មវិធី & # 160; ។ តើ អ្នក ពិត ជា ចង់ ចុះ កំណត់ ហេតុ ឬ ទេ ? - + 로그인 - + PDF로 내보내기 - + 제출하다 - + 클론 - + 저장 후 새로 만들기 \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.resx b/src/Infrastructure/Resources/Constants/ConstantString.resx index f854657bf..b20508a80 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.resx @@ -1,294 +1,300 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Actions - + Add - + Advanced Search - + Are you sure you want to delete the selected items: {0}? - + Are you sure you want to delete this item with Id: {0}? - + Are you sure you want to delete this item: {0}? - + Cancel - + Clear - + Close - + Confirm - + New - + Create a new {0} - + Create successfully - + Delete - + Delete Confirmation - + Delete selected items: {0} - + Delete successfully - + Delete the {0} - + Downloading... - + Edit - + Edit the {0} - + Export fail - + Export successfully - + Export to Excel - + Import fail - + Import from Excel - + Import successfully - + Loading... - + Login fail - + Login successfully - + Logout - + Logout Confirmation - + Logout fail - + Logout successfully - + Next - + No - + No Allowed - + OK - + Order By - + Previous - + Refresh - + Reset - + Save - + Save Changes - + Save successfully - + Search - + Sign in with {0} - + Update successfully - + Uploading... - + Yes - + You are attempting to log out of application. Do you really want to log out? - + Sign In - + Export to PDF - + Submit - + Clone - + Save & New - + Selected - + Selected Total \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.ru.resx b/src/Infrastructure/Resources/Constants/ConstantString.ru.resx index 689c7e32b..4d9e5e367 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.ru.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.ru.resx @@ -1,288 +1,294 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Подтверждение выхода - + Действия - + Добавлять - + Расширенный поиск - + Вы уверены, что хотите удалить выбранные элементы: {0}? - + Вы уверены, что хотите удалить этот элемент с идентификатором: {0}? - + Вы уверены, что хотите удалить этот элемент: {0}? - + Отмена - + Прозрачный - + Закрывать - + Новый - + Создать новый {0} - + Создать успешно - + Удалить - + Удалить подтверждение - + Удалить выбранные элементы: {0} - + Удалить успешно - + Удалить {0} - + Загрузка... - + Редактировать - + Изменить {0} - + Ошибка экспорта - + Экспорт успешно - + Экспорт в Excel - + Ошибка импорта - + Импорт из Excel - + Импорт успешно - + Загрузка... - + Неверный логин - + Войти успешно - + Выйти - + Ошибка выхода - + Выйти успешно - + Следующий - + Нет - + Не разрешено - + ХОРОШО - + Сортировать по - + Предыдущий - + Обновить - + Перезагрузить - + Сохранять - + Сохранить изменения - + Сохранить успешно - + Поиск - + Войдите с помощью {0} - + Обновление успешно - + Загрузка... - + Да - + Подтверждать - + Вы пытаетесь выйти из приложения. Вы действительно хотите выйти из системы? - + Войти - + Экспорт в PDF - + Представлять на рассмотрение - + Клон - + Сохранить и создать \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.zh-CN.resx b/src/Infrastructure/Resources/Constants/ConstantString.zh-CN.resx index ee53e831e..b0716408c 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.zh-CN.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.zh-CN.resx @@ -1,294 +1,300 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 操作 - + 新增 - + 新建 - + 删除 - + 编辑 - + 导出Excel - + 导入Excel - + 刷新 - + 保存 - + 保存变更 - + 你确认要删除选中的记录: {0}? - + 你确认要删除这行记录 Id: {0}? - + 你确认要删除这行记录: {0}? - + 创建新{0} - + 创建成功 - + 删除选中的记录: {0} - + 删除成功 - + 删除{0} - + 编辑{0} - + 导出失败 - + 导出成功 - + 导入失败 - + 导入成功 - + 登录失败 - + 登录成功 - + 注销失败 - + 注销成功 - + 保存成功 - + 更新成功 - + 取消 - + 清除 - + 关闭 - + 下载中... - + 下一个 - + - + 不允许 - + 确认 - + 上一个 - + 重置 - + 搜索 - + 上传中... - + - + 用{0}登录 - + 高级查询 - + 排序 - + 删除确认 - + 加载中... - + 注销 - + 注销确认 - + 您正试图注销应用程序.您真的想退出吗? - + 确认 - + 登录 - + 导出PDF - + 提交 - + 克隆 - + 保存 & 新增 - + 选中 - + 选中的汇总 \ No newline at end of file diff --git a/src/Infrastructure/Services/ApplicationUserClaimsPrincipalFactory.cs b/src/Infrastructure/Services/ApplicationUserClaimsPrincipalFactory.cs index 558e4d02f..89e0f0296 100644 --- a/src/Infrastructure/Services/ApplicationUserClaimsPrincipalFactory.cs +++ b/src/Infrastructure/Services/ApplicationUserClaimsPrincipalFactory.cs @@ -8,56 +8,51 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services; #nullable disable public class ApplicationUserClaimsPrincipalFactory : UserClaimsPrincipalFactory { - - public ApplicationUserClaimsPrincipalFactory(UserManager userManager, RoleManager roleManager, IOptions optionsAccessor) : base(userManager, roleManager, optionsAccessor) { - } + public override async Task CreateAsync(ApplicationUser user) { var principal = await base.CreateAsync(user); if (!string.IsNullOrEmpty(user.TenantId)) - { - ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] { + ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] + { new Claim(ApplicationClaimTypes.TenantId, user.TenantId) }); - } if (!string.IsNullOrEmpty(user.TenantName)) - { - ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] { + ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] + { new Claim(ApplicationClaimTypes.TenantName, user.TenantName) }); - } if (!string.IsNullOrEmpty(user.SuperiorId)) - { - ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] { + ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] + { new Claim(ApplicationClaimTypes.SuperiorId, user.SuperiorId) }); - } if (!string.IsNullOrEmpty(user.DisplayName)) - { - ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] { + ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] + { new Claim(ClaimTypes.GivenName, user.DisplayName) }); - } if (!string.IsNullOrEmpty(user.ProfilePictureDataUrl)) - { - ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] { + ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] + { new Claim(ApplicationClaimTypes.ProfilePictureDataUrl, user.ProfilePictureDataUrl) }); - } var appuser = await UserManager.FindByIdAsync(user.Id); var roles = await UserManager.GetRolesAsync(appuser); if (roles != null && roles.Count > 0) { var rolesStr = string.Join(",", roles); - ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] { + ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] + { new Claim(ApplicationClaimTypes.AssignedRoles, rolesStr) }); } + return principal; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/ConfigureCookieAuthenticationOptions.cs b/src/Infrastructure/Services/ConfigureCookieAuthenticationOptions.cs index 83039c603..f09942e26 100644 --- a/src/Infrastructure/Services/ConfigureCookieAuthenticationOptions.cs +++ b/src/Infrastructure/Services/ConfigureCookieAuthenticationOptions.cs @@ -6,7 +6,7 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services; #nullable disable public class ConfigureCookieAuthenticationOptions - : IPostConfigureOptions + : IPostConfigureOptions { private readonly ITicketStore _ticketStore; @@ -16,8 +16,8 @@ public ConfigureCookieAuthenticationOptions(ITicketStore ticketStore) } public void PostConfigure(string name, - CookieAuthenticationOptions options) + CookieAuthenticationOptions options) { options.SessionStore = _ticketStore; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/CurrentUserService.cs b/src/Infrastructure/Services/CurrentUserService.cs index 70e8fafe3..5964fff7a 100644 --- a/src/Infrastructure/Services/CurrentUserService.cs +++ b/src/Infrastructure/Services/CurrentUserService.cs @@ -9,4 +9,4 @@ public class CurrentUserService : ICurrentUserService public string? UserName { get; set; } public string? TenantId { get; set; } public string? TenantName { get; set; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/DateTimeService.cs b/src/Infrastructure/Services/DateTimeService.cs index a3a624393..75051bcc4 100644 --- a/src/Infrastructure/Services/DateTimeService.cs +++ b/src/Infrastructure/Services/DateTimeService.cs @@ -6,4 +6,4 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services; public class DateTimeService : IDateTime { public DateTime Now => DateTime.UtcNow; -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/ExcelService.cs b/src/Infrastructure/Services/ExcelService.cs index 687cb77b2..5fa2a2cdc 100644 --- a/src/Infrastructure/Services/ExcelService.cs +++ b/src/Infrastructure/Services/ExcelService.cs @@ -40,6 +40,7 @@ public async Task CreateTemplateAsync(IEnumerable fields, string colIndex++; } + using (var stream = new MemoryStream()) { workbook.SaveAs(stream); @@ -77,6 +78,7 @@ public async Task ExportAsync(IEnumerable data colIndex++; } + var dataList = data.ToList(); foreach (var item in dataList) { @@ -86,10 +88,9 @@ public async Task ExportAsync(IEnumerable data var result = headers.Select(header => mappers[header](item)); foreach (var value in result) - { ws.Cell(rowIndex, colIndex++).Value = value == null ? Blank.Value : value.ToString(); - } } + using (var stream = new MemoryStream()) { workbook.SaveAs(stream); @@ -100,67 +101,53 @@ public async Task ExportAsync(IEnumerable data } } - public async Task>> ImportAsync(byte[] data, Dictionary> mappers, string sheetName = "Sheet1") + public async Task>> ImportAsync(byte[] data, + Dictionary> mappers, string sheetName = "Sheet1") { - using (var workbook = new XLWorkbook(new MemoryStream(data))) { if (!workbook.Worksheets.Contains(sheetName)) - { - return await Result>.FailureAsync(new string[] { string.Format(_localizer["Sheet with name {0} does not exist!"], sheetName) }); - } + return await Result>.FailureAsync( + string.Format(_localizer["Sheet with name {0} does not exist!"], sheetName)); var ws = workbook.Worksheet(sheetName); var dt = new DataTable(); var titlesInFirstRow = true; foreach (var firstRowCell in ws.Range(1, 1, 1, ws.LastCellUsed().Address.ColumnNumber).Cells()) - { - dt.Columns.Add(titlesInFirstRow ? firstRowCell.GetString() : $"Column {firstRowCell.Address.ColumnNumber}"); - } + dt.Columns.Add(titlesInFirstRow + ? firstRowCell.GetString() + : $"Column {firstRowCell.Address.ColumnNumber}"); var startRow = titlesInFirstRow ? 2 : 1; var headers = mappers.Keys.Select(x => x).ToList(); var errors = new List(); foreach (var header in headers) - { if (!dt.Columns.Contains(header)) - { errors.Add(string.Format(_localizer["Header '{0}' does not exist in table!"], header)); - } - } - if (errors.Any()) - { - return await Result>.FailureAsync(errors.ToArray()); - } + if (errors.Any()) return await Result>.FailureAsync(errors.ToArray()); var lastRow = ws.LastRowUsed(); var list = new List(); - foreach (IXLRow row in ws.Rows(startRow, lastRow.RowNumber())) - { + foreach (var row in ws.Rows(startRow, lastRow.RowNumber())) try { - DataRow dataRow = dt.Rows.Add(); - var item = (TEntity?)Activator.CreateInstance(typeof(TEntity)) ?? throw new NullReferenceException($"{nameof(TEntity)}"); - foreach (IXLCell cell in row.Cells()) - { + var dataRow = dt.Rows.Add(); + var item = (TEntity?)Activator.CreateInstance(typeof(TEntity)) ?? + throw new NullReferenceException($"{nameof(TEntity)}"); + foreach (var cell in row.Cells()) if (cell.DataType == XLDataType.DateTime) - { dataRow[cell.Address.ColumnNumber - 1] = cell.GetDateTime().ToString("yyyy-MM-dd HH:mm:ss"); - } else - { dataRow[cell.Address.ColumnNumber - 1] = cell.Value.ToString(); - } - } headers.ForEach(x => mappers[x](dataRow, item)); list.Add(item); } catch (Exception e) { - return await Result>.FailureAsync(new string[] { string.Format(_localizer["Sheet name {0}:{1}"], sheetName, e.Message) }); + return await Result>.FailureAsync( + string.Format(_localizer["Sheet name {0}:{1}"], sheetName, e.Message)); } - } return await Result>.SuccessAsync(list); } } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/Identity/IdentityService.cs b/src/Infrastructure/Services/Identity/IdentityService.cs index d51b71436..4ffa03a11 100644 --- a/src/Infrastructure/Services/Identity/IdentityService.cs +++ b/src/Infrastructure/Services/Identity/IdentityService.cs @@ -16,71 +16,84 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.Identity; public class IdentityService : IIdentityService { - private readonly UserManager _userManager; - private readonly IUserClaimsPrincipalFactory _userClaimsPrincipalFactory; private readonly IAuthorizationService _authorizationService; private readonly IAppCache _cache; - private readonly IMapper _mapper; private readonly IStringLocalizer _localizer; - private TimeSpan RefreshInterval => TimeSpan.FromSeconds(60); - private LazyCacheEntryOptions Options => new LazyCacheEntryOptions().SetAbsoluteExpiration(RefreshInterval, ExpirationMode.LazyExpiration); + private readonly IMapper _mapper; + private readonly IUserClaimsPrincipalFactory _userClaimsPrincipalFactory; + private readonly UserManager _userManager; + public IdentityService( IServiceScopeFactory scopeFactory, AppConfigurationSettings appConfig, IAppCache cache, - IMapper mapper, + IMapper mapper, IStringLocalizer localizer) { var scope = scopeFactory.CreateScope(); _userManager = scope.ServiceProvider.GetRequiredService>(); - _userClaimsPrincipalFactory = scope.ServiceProvider.GetRequiredService>(); + _userClaimsPrincipalFactory = + scope.ServiceProvider.GetRequiredService>(); _authorizationService = scope.ServiceProvider.GetRequiredService(); _cache = cache; _mapper = mapper; _localizer = localizer; } + private TimeSpan RefreshInterval => TimeSpan.FromSeconds(60); + + private LazyCacheEntryOptions Options => + new LazyCacheEntryOptions().SetAbsoluteExpiration(RefreshInterval, ExpirationMode.LazyExpiration); + public async Task GetUserNameAsync(string userId, CancellationToken cancellation = default) { var key = $"GetUserNameAsync:{userId}"; - var user = await _cache.GetOrAddAsync(key, async () => await _userManager.Users.SingleOrDefaultAsync(u => u.Id == userId), Options); + var user = await _cache.GetOrAddAsync(key, + async () => await _userManager.Users.SingleOrDefaultAsync(u => u.Id == userId), Options); return user?.UserName; } + public string GetUserName(string userId) { var key = $"GetUserName-byId:{userId}"; var user = _cache.GetOrAdd(key, () => _userManager.Users.SingleOrDefault(u => u.Id == userId), Options); return user?.UserName ?? string.Empty; } + public async Task IsInRoleAsync(string userId, string role, CancellationToken cancellation = default) { - var user = await _userManager.Users.SingleOrDefaultAsync(u => u.Id == userId, cancellation) ?? throw new NotFoundException(_localizer["User Not Found."]); + var user = await _userManager.Users.SingleOrDefaultAsync(u => u.Id == userId, cancellation) ?? + throw new NotFoundException(_localizer["User Not Found."]); return await _userManager.IsInRoleAsync(user, role); } public async Task AuthorizeAsync(string userId, string policyName, CancellationToken cancellation = default) { - var user = await _userManager.Users.SingleOrDefaultAsync(u => u.Id == userId, cancellation) ?? throw new NotFoundException(_localizer["User Not Found."]); + var user = await _userManager.Users.SingleOrDefaultAsync(u => u.Id == userId, cancellation) ?? + throw new NotFoundException(_localizer["User Not Found."]); var principal = await _userClaimsPrincipalFactory.CreateAsync(user); var result = await _authorizationService.AuthorizeAsync(principal, policyName); return result.Succeeded; - } public async Task DeleteUserAsync(string userId, CancellationToken cancellation = default) { - var user = await _userManager.Users.SingleOrDefaultAsync(u => u.Id == userId, cancellation) ?? throw new NotFoundException(_localizer["User Not Found."]); + var user = await _userManager.Users.SingleOrDefaultAsync(u => u.Id == userId, cancellation) ?? + throw new NotFoundException(_localizer["User Not Found."]); var result = await _userManager.DeleteAsync(user); return result.ToApplicationResult(); } - public async Task> FetchUsers(string roleName, CancellationToken cancellation = default) + + public async Task> FetchUsers(string roleName, + CancellationToken cancellation = default) { var result = await _userManager.Users - .Where(x => x.UserRoles.Any(y => y.Role.Name == roleName)) - .Include(x => x.UserRoles) - .ToDictionaryAsync(x => x.UserName!, y => y.DisplayName, cancellation); + .Where(x => x.UserRoles.Any(y => y.Role.Name == roleName)) + .Include(x => x.UserRoles) + .ToDictionaryAsync(x => x.UserName!, y => y.DisplayName, cancellation); return result; } + public async Task UpdateLiveStatus(string userId, bool isLive, CancellationToken cancellation = default) { var user = await _userManager.Users.FirstOrDefaultAsync(x => x.Id == userId && x.IsLive != isLive); @@ -90,31 +103,31 @@ public async Task UpdateLiveStatus(string userId, bool isLive, CancellationToken var result = await _userManager.UpdateAsync(user); } } + public async Task GetApplicationUserDto(string userId, CancellationToken cancellation = default) { var key = $"GetApplicationUserDto:{userId}"; - var result = await _cache.GetOrAddAsync(key, async () => await _userManager.Users.Where(x => x.Id == userId).Include(x => x.UserRoles).ThenInclude(x => x.Role).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(cancellation) ?? new ApplicationUserDto(), Options); + var result = await _cache.GetOrAddAsync(key, + async () => await _userManager.Users.Where(x => x.Id == userId).Include(x => x.UserRoles) + .ThenInclude(x => x.Role).ProjectTo(_mapper.ConfigurationProvider) + .FirstOrDefaultAsync(cancellation) ?? new ApplicationUserDto(), Options); return result; } + public async Task?> GetUsers(string? tenantId, CancellationToken cancellation = default) { var key = $"GetApplicationUserDtoListWithTenantId:{tenantId}"; - Func?>> getUsersByTenantId = async (tenantId, token) => - { - if (string.IsNullOrEmpty(tenantId)) - { - return await _userManager.Users.Include(x => x.UserRoles).ThenInclude(x => x.Role) - .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - } - else + Func?>> getUsersByTenantId = + async (tenantId, token) => { - return await _userManager.Users.Where(x => x.TenantId == tenantId).Include(x => x.UserRoles).ThenInclude(x => x.Role) - .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - } - - - }; + if (string.IsNullOrEmpty(tenantId)) + return await _userManager.Users.Include(x => x.UserRoles).ThenInclude(x => x.Role) + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + return await _userManager.Users.Where(x => x.TenantId == tenantId).Include(x => x.UserRoles) + .ThenInclude(x => x.Role) + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + }; var result = await _cache.GetOrAddAsync(key, () => getUsersByTenantId(tenantId, cancellation), Options); return result; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/Identity/UserDataProvider.cs b/src/Infrastructure/Services/Identity/UserDataProvider.cs index 734859cba..73dc00f50 100644 --- a/src/Infrastructure/Services/Identity/UserDataProvider.cs +++ b/src/Infrastructure/Services/Identity/UserDataProvider.cs @@ -5,15 +5,13 @@ using LazyCache; namespace CleanArchitecture.Blazor.Infrastructure.Services.Identity; + public class UserDataProvider : IUserDataProvider { private const string CACHEKEY = "ALL-ApplicationUserDto"; private readonly IAppCache _cache; private readonly IMapper _mapper; private readonly UserManager _userManager; - public List DataSource { get; private set; } - - public event Action? OnChange; public UserDataProvider( IAppCache cache, @@ -26,23 +24,33 @@ public UserDataProvider( _userManager = scope.ServiceProvider.GetRequiredService>(); DataSource = new List(); } + + public List DataSource { get; private set; } + + public event Action? OnChange; + public void Initialize() { - DataSource = _cache.GetOrAdd(CACHEKEY,()=>_userManager.Users.Include(x => x.UserRoles).ThenInclude(x => x.Role).ProjectTo(_mapper.ConfigurationProvider).OrderBy(x=>x.UserName).ToList()); + DataSource = _cache.GetOrAdd(CACHEKEY, + () => _userManager.Users.Include(x => x.UserRoles).ThenInclude(x => x.Role) + .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.UserName).ToList()); OnChange?.Invoke(); } public async Task InitializeAsync() { - DataSource =await _cache.GetOrAddAsync(CACHEKEY,()=> _userManager.Users.Include(x => x.UserRoles).ThenInclude(x => x.Role).ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.UserName).ToListAsync()); + DataSource = await _cache.GetOrAddAsync(CACHEKEY, + () => _userManager.Users.Include(x => x.UserRoles).ThenInclude(x => x.Role) + .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.UserName).ToListAsync()); OnChange?.Invoke(); } public async Task Refresh() { _cache.Remove(CACHEKEY); - DataSource = await _cache.GetOrAddAsync(CACHEKEY, () => _userManager.Users.Include(x => x.UserRoles).ThenInclude(x => x.Role).ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.UserName).ToListAsync()); + DataSource = await _cache.GetOrAddAsync(CACHEKEY, + () => _userManager.Users.Include(x => x.UserRoles).ThenInclude(x => x.Role) + .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.UserName).ToListAsync()); OnChange?.Invoke(); - } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/Identity/UsersStateContainer.cs b/src/Infrastructure/Services/Identity/UsersStateContainer.cs index e1dfa79c6..5cfbbc1d2 100644 --- a/src/Infrastructure/Services/Identity/UsersStateContainer.cs +++ b/src/Infrastructure/Services/Identity/UsersStateContainer.cs @@ -1,20 +1,27 @@ using System.Collections.Concurrent; namespace CleanArchitecture.Blazor.Infrastructure.Services.Identity; + public class UsersStateContainer : IUsersStateContainer { - public ConcurrentDictionary UsersByConnectionId { get; } = new ConcurrentDictionary(); + public ConcurrentDictionary UsersByConnectionId { get; } = new(); public event Action? OnChange; + public void AddOrUpdate(string connectionId, string? name) { - UsersByConnectionId.AddOrUpdate(connectionId, name??String.Empty, (key, oldValue) => name??String.Empty); + UsersByConnectionId.AddOrUpdate(connectionId, name ?? string.Empty, (key, oldValue) => name ?? string.Empty); NotifyStateChanged(); } + public void Remove(string connectionId) { UsersByConnectionId.TryRemove(connectionId, out var _); NotifyStateChanged(); } - private void NotifyStateChanged() => OnChange?.Invoke(); -} + + private void NotifyStateChanged() + { + OnChange?.Invoke(); + } +} \ No newline at end of file diff --git a/src/Infrastructure/Services/InMemoryTicketStore.cs b/src/Infrastructure/Services/InMemoryTicketStore.cs index 2799121d0..e015e0795 100644 --- a/src/Infrastructure/Services/InMemoryTicketStore.cs +++ b/src/Infrastructure/Services/InMemoryTicketStore.cs @@ -3,11 +3,12 @@ using Microsoft.Extensions.Caching.Memory; namespace CleanArchitecture.Blazor.Infrastructure.Services; + /// -/// Adapted from https://github.com/aspnet/Security/blob/dev/samples/CookieSessionSample/MemoryCacheTicketStore.cs -/// to manage large identity cookies. -/// More info: http://www.dotnettips.info/post/2581 -/// And http://www.dotnettips.info/post/2575 +/// Adapted from https://github.com/aspnet/Security/blob/dev/samples/CookieSessionSample/MemoryCacheTicketStore.cs +/// to manage large identity cookies. +/// More info: http://www.dotnettips.info/post/2581 +/// And http://www.dotnettips.info/post/2575 /// #nullable disable warnings public class InMemoryTicketStore : ITicketStore @@ -16,7 +17,8 @@ public class InMemoryTicketStore : ITicketStore public InMemoryTicketStore(IMemoryCache cache) { - _cache = cache ?? throw new ArgumentNullException(nameof(cache)); ; + _cache = cache ?? throw new ArgumentNullException(nameof(cache)); + ; } public Task RemoveAsync(string key) @@ -36,15 +38,10 @@ public Task RenewAsync(string key, AuthenticationTicket ticket) { var options = new MemoryCacheEntryOptions().SetSize(1); var expiresUtc = ticket.Properties.ExpiresUtc; - if (expiresUtc.HasValue) - { - options.SetAbsoluteExpiration(expiresUtc.Value); - } + if (expiresUtc.HasValue) options.SetAbsoluteExpiration(expiresUtc.Value); if (ticket.Properties.AllowRefresh ?? false) - { - options.SetSlidingExpiration(TimeSpan.FromMinutes(60));//TODO: configurable. - } + options.SetSlidingExpiration(TimeSpan.FromMinutes(60)); //TODO: configurable. _cache.Set(key, ticket, options); @@ -54,7 +51,7 @@ public Task RenewAsync(string key, AuthenticationTicket ticket) public async Task StoreAsync(AuthenticationTicket ticket) { var key = ticket.Principal.Claims - .First(c => c.Type == ClaimTypes.Name).Value; + .First(c => c.Type == ClaimTypes.Name).Value; await RenewAsync(key, ticket); return key; diff --git a/src/Infrastructure/Services/JWT/AccessTokenGenerator.cs b/src/Infrastructure/Services/JWT/AccessTokenGenerator.cs index e27c6624c..62cb41f4f 100644 --- a/src/Infrastructure/Services/JWT/AccessTokenGenerator.cs +++ b/src/Infrastructure/Services/JWT/AccessTokenGenerator.cs @@ -5,8 +5,9 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; public class AccessTokenGenerator : IAccessTokenGenerator { - private readonly JwtSecurityTokenHandler _tokenHandler; private readonly SimpleJwtOptions _options; + private readonly JwtSecurityTokenHandler _tokenHandler; + public AccessTokenGenerator(JwtSecurityTokenHandler tokenHandler, IOptions options) { _tokenHandler = tokenHandler; @@ -27,4 +28,4 @@ public string GenerateAccessToken(ClaimsPrincipal user) ); return _tokenHandler.WriteToken(new JwtSecurityToken(header, payload)); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/AccessTokenProvider.cs b/src/Infrastructure/Services/JWT/AccessTokenProvider.cs index 552880336..7a4169397 100644 --- a/src/Infrastructure/Services/JWT/AccessTokenProvider.cs +++ b/src/Infrastructure/Services/JWT/AccessTokenProvider.cs @@ -4,29 +4,27 @@ using CleanArchitecture.Blazor.Domain.Identity; using CleanArchitecture.Blazor.Infrastructure.Extensions; using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage; -using Microsoft.IdentityModel.Tokens; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public class AccessTokenProvider : IAccessTokenProvider { - private readonly string _tokenKey = nameof(_tokenKey); - private readonly string _refreshTokenKey = nameof(_refreshTokenKey); + private readonly ICurrentUserService _currentUser; private readonly ProtectedLocalStorage _localStorage; private readonly ILoginService _loginService; - private readonly IAccessTokenValidator _tokenValidator; + private readonly string _refreshTokenKey = nameof(_refreshTokenKey); private readonly IRefreshTokenValidator _refreshTokenValidator; - private readonly IAccessTokenGenerator _tokenGenerator; private readonly ITenantProvider _tenantProvider; - private readonly ICurrentUserService _currentUser; - private readonly UserManager _userManager; + private readonly IAccessTokenGenerator _tokenGenerator; + private readonly string _tokenKey = nameof(_tokenKey); + private readonly IAccessTokenValidator _tokenValidator; private readonly IUserClaimsPrincipalFactory _userClaimsPrincipalFactory; - public string? AccessToken { get; private set; } - public string? RefreshToken { get; private set; } + private readonly UserManager _userManager; - public AccessTokenProvider(IServiceScopeFactory scopeFactory, + public AccessTokenProvider(IServiceScopeFactory scopeFactory, ProtectedLocalStorage localStorage, - ILoginService loginService, - IAccessTokenValidator tokenValidator, + ILoginService loginService, + IAccessTokenValidator tokenValidator, IRefreshTokenValidator refreshTokenValidator, IAccessTokenGenerator tokenGenerator, ITenantProvider tenantProvider, @@ -34,7 +32,8 @@ public AccessTokenProvider(IServiceScopeFactory scopeFactory, { var scope = scopeFactory.CreateScope(); _userManager = scope.ServiceProvider.GetRequiredService>(); - _userClaimsPrincipalFactory = scope.ServiceProvider.GetRequiredService>(); + _userClaimsPrincipalFactory = + scope.ServiceProvider.GetRequiredService>(); _localStorage = localStorage; _loginService = loginService; _tokenValidator = tokenValidator; @@ -43,26 +42,30 @@ public AccessTokenProvider(IServiceScopeFactory scopeFactory, _tenantProvider = tenantProvider; _currentUser = currentUser; } + + public string? AccessToken { get; private set; } + public string? RefreshToken { get; private set; } + public async Task Login(ApplicationUser applicationUser) { var principal = await _userClaimsPrincipalFactory.CreateAsync(applicationUser); var token = await _loginService.LoginAsync(principal); - await _localStorage.SetAsync(_tokenKey, token); + await _localStorage.SetAsync(_tokenKey, token); AccessToken = token.AccessToken; RefreshToken = token.RefreshToken; SetUserPropertiesFromClaimsPrincipal(principal); return AccessToken; } + public async Task ParseClaimsFromJwt(string? accessToken) { - if(string.IsNullOrEmpty(accessToken)) return new ClaimsPrincipal(new ClaimsIdentity()); + if (string.IsNullOrEmpty(accessToken)) return new ClaimsPrincipal(new ClaimsIdentity()); var validationResult = await _tokenValidator.ValidateTokenAsync(accessToken); if (validationResult.IsValid) - { return SetUserPropertiesFromClaimsPrincipal(new ClaimsPrincipal(validationResult.ClaimsIdentity)); - } return new ClaimsPrincipal(new ClaimsIdentity()); } + public async Task GetClaimsPrincipal() { try @@ -74,20 +77,12 @@ public async Task GetClaimsPrincipal() RefreshToken = token.Value.RefreshToken; var validationResult = await _tokenValidator.ValidateTokenAsync(AccessToken!); if (validationResult.IsValid) - { - return SetUserPropertiesFromClaimsPrincipal(new ClaimsPrincipal(validationResult.ClaimsIdentity)); - } - else - { - var validationRefreshResult = await _refreshTokenValidator.ValidateTokenAsync(RefreshToken!); - if (validationRefreshResult.IsValid) - { - - return SetUserPropertiesFromClaimsPrincipal(new ClaimsPrincipal(validationRefreshResult.ClaimsIdentity)); - } - } + var validationRefreshResult = await _refreshTokenValidator.ValidateTokenAsync(RefreshToken!); + if (validationRefreshResult.IsValid) + return SetUserPropertiesFromClaimsPrincipal( + new ClaimsPrincipal(validationRefreshResult.ClaimsIdentity)); } } catch (CryptographicException) @@ -98,9 +93,16 @@ public async Task GetClaimsPrincipal() { return new ClaimsPrincipal(new ClaimsIdentity()); } + return new ClaimsPrincipal(new ClaimsIdentity()); } + + public ValueTask RemoveAuthDataFromStorage() + { + return _localStorage.DeleteAsync(_tokenKey); + } + private ClaimsPrincipal SetUserPropertiesFromClaimsPrincipal(ClaimsPrincipal principal) { _tenantProvider.TenantId = principal.GetTenantId(); @@ -108,29 +110,21 @@ private ClaimsPrincipal SetUserPropertiesFromClaimsPrincipal(ClaimsPrincipal pri _currentUser.UserId = principal.GetUserId(); _currentUser.UserName = principal.GetUserName(); _currentUser.TenantId = principal.GetTenantId(); - _currentUser.TenantName = principal.GetTenantName(); // This seems to be an error in original code. Fixing it here. + _currentUser.TenantName = + principal.GetTenantName(); // This seems to be an error in original code. Fixing it here. return principal; } - - public ValueTask RemoveAuthDataFromStorage() => _localStorage.DeleteAsync(_tokenKey); - public async Task Refresh(string refreshToken) { - TokenValidationResult validationResult = await _tokenValidator.ValidateTokenAsync(refreshToken!); - if (!validationResult.IsValid) - { - throw validationResult.Exception; - } - JwtSecurityToken? jwt = validationResult.SecurityToken as JwtSecurityToken; - string userId = jwt!.Claims.First(claim => claim.Type == "id").Value; + var validationResult = await _tokenValidator.ValidateTokenAsync(refreshToken!); + if (!validationResult.IsValid) throw validationResult.Exception; + var jwt = validationResult.SecurityToken as JwtSecurityToken; + var userId = jwt!.Claims.First(claim => claim.Type == "id").Value; var user = await _userManager.FindByIdAsync(userId); - if (user == null) - { - throw new Exception($"no found user by userId:{userId}"); - } + if (user == null) throw new Exception($"no found user by userId:{userId}"); var principal = await _userClaimsPrincipalFactory.CreateAsync(user); - string accessToken = _tokenGenerator.GenerateAccessToken(principal); + var accessToken = _tokenGenerator.GenerateAccessToken(principal); return accessToken; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/AccessTokenValidator.cs b/src/Infrastructure/Services/JWT/AccessTokenValidator.cs index 8ea8843dd..3fc615777 100644 --- a/src/Infrastructure/Services/JWT/AccessTokenValidator.cs +++ b/src/Infrastructure/Services/JWT/AccessTokenValidator.cs @@ -1,10 +1,10 @@ using System.IdentityModel.Tokens.Jwt; - using Microsoft.IdentityModel.Tokens; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + /// -/// Use this class to validate refresh tokens +/// Use this class to validate refresh tokens /// public class AccessTokenValidator : IAccessTokenValidator { @@ -15,36 +15,30 @@ public AccessTokenValidator(JwtSecurityTokenHandler tokenHandler, IOptions - /// Validate a refresh token + /// Validate a refresh token /// /// /// public async Task ValidateTokenAsync(string token) { - // if not exists: return invalid validation result. if (token is null) - { return new TokenValidationResult { IsValid = false, - Exception = new RefreshTokenNotFoundException("Refresh token might be invalid or expired"), + Exception = new RefreshTokenNotFoundException("Refresh token might be invalid or expired") }; - } // if jwt is invalid: delete token from db? and return validation result. var result = await _tokenHandler.ValidateTokenAsync(token, _validationParameters); if (!result.IsValid) - { // delete token from db // ... return result; - } return result; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/AuthStore.cs b/src/Infrastructure/Services/JWT/AuthStore.cs index cd45df21b..8f67162fb 100644 --- a/src/Infrastructure/Services/JWT/AuthStore.cs +++ b/src/Infrastructure/Services/JWT/AuthStore.cs @@ -1,10 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; -namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; -public class AuthStore:BaseAuthStore +public class AuthStore : BaseAuthStore { -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/AuthenticatedUserResponse.cs b/src/Infrastructure/Services/JWT/AuthenticatedUserResponse.cs index 1c69c0326..0ea35b680 100644 --- a/src/Infrastructure/Services/JWT/AuthenticatedUserResponse.cs +++ b/src/Infrastructure/Services/JWT/AuthenticatedUserResponse.cs @@ -1,9 +1,10 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + /// -/// the dto used to send an authenticated user response containing access Token and refresh Token +/// the dto used to send an authenticated user response containing access Token and refresh Token /// public class AuthenticatedUserResponse { public string? AccessToken { get; set; } public string? RefreshToken { get; set; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/BaseAuthStore.cs b/src/Infrastructure/Services/JWT/BaseAuthStore.cs index 6ec23cfab..52b49203b 100644 --- a/src/Infrastructure/Services/JWT/BaseAuthStore.cs +++ b/src/Infrastructure/Services/JWT/BaseAuthStore.cs @@ -1,16 +1,11 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.Json; -using System.Threading.Tasks; +namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; -namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; public abstract class BaseAuthStore { + public delegate void OnSaveEventHandler(object sender, BaseAuthStore authStore); + public string? AccessToken { get; set; } public string? RefreshToken { get; set; } - public delegate void OnSaveEventHandler(object sender, BaseAuthStore authStore); public event OnSaveEventHandler? OnSave; public void Save(string accessToken, string refreshToken) @@ -26,8 +21,4 @@ public void Clear() AccessToken = null; OnSave?.Invoke(this, this); } - - - - } \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/DefaultAuthenticator.cs b/src/Infrastructure/Services/JWT/DefaultAuthenticator.cs index e45da0ec2..3ab436ca0 100644 --- a/src/Infrastructure/Services/JWT/DefaultAuthenticator.cs +++ b/src/Infrastructure/Services/JWT/DefaultAuthenticator.cs @@ -1,58 +1,49 @@ using System.IdentityModel.Tokens.Jwt; using CleanArchitecture.Blazor.Domain.Identity; -using Microsoft.IdentityModel.Tokens; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public class DefaultAuthenticator : IAuthenticator { - private readonly UserManager _userManager; - private readonly IUserClaimsPrincipalFactory _userClaimsPrincipalFactory; - private readonly IAccessTokenValidator _tokenValidator; private readonly IAccessTokenGenerator _tokenGenerator; + private readonly IAccessTokenValidator _tokenValidator; + private readonly IUserClaimsPrincipalFactory _userClaimsPrincipalFactory; + private readonly UserManager _userManager; - public DefaultAuthenticator(IServiceScopeFactory scopeFactory, IAccessTokenValidator tokenValidator, IAccessTokenGenerator tokenGenerator) + public DefaultAuthenticator(IServiceScopeFactory scopeFactory, IAccessTokenValidator tokenValidator, + IAccessTokenGenerator tokenGenerator) { var scope = scopeFactory.CreateScope(); _userManager = scope.ServiceProvider.GetRequiredService>(); - _userClaimsPrincipalFactory = scope.ServiceProvider.GetRequiredService>(); + _userClaimsPrincipalFactory = + scope.ServiceProvider.GetRequiredService>(); _tokenValidator = tokenValidator; _tokenGenerator = tokenGenerator; } + public async Task Authenticate(string username, string password) { var user = await _userManager.FindByNameAsync(username); - if (user == null) - { - return null; - } + if (user == null) return null; var correctPassword = await _userManager.CheckPasswordAsync(user, password); - if (!correctPassword) - { - return null; - } + if (!correctPassword) return null; return user; } public async Task Refresh(string refreshToken) { - TokenValidationResult validationResult = await _tokenValidator.ValidateTokenAsync(refreshToken!); - if (!validationResult.IsValid) - { - return string.Empty; - } - JwtSecurityToken? jwt = validationResult.SecurityToken as JwtSecurityToken; - string userId = jwt!.Claims.First(claim => claim.Type == "id").Value; + var validationResult = await _tokenValidator.ValidateTokenAsync(refreshToken!); + if (!validationResult.IsValid) return string.Empty; + var jwt = validationResult.SecurityToken as JwtSecurityToken; + var userId = jwt!.Claims.First(claim => claim.Type == "id").Value; var user = await _userManager.FindByIdAsync(userId); - if (user == null) - { - return string.Empty; - } + if (user == null) return string.Empty; var principal = await _userClaimsPrincipalFactory.CreateAsync(user); - string accessToken =_tokenGenerator.GenerateAccessToken(principal); + var accessToken = _tokenGenerator.GenerateAccessToken(principal); return accessToken; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/DefaultClaimsProvider.cs b/src/Infrastructure/Services/JWT/DefaultClaimsProvider.cs index 27cc6b9d3..423497cf7 100644 --- a/src/Infrastructure/Services/JWT/DefaultClaimsProvider.cs +++ b/src/Infrastructure/Services/JWT/DefaultClaimsProvider.cs @@ -1,13 +1,14 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + /// -/// Use to get access token claims and refresh token claims +/// Use to get access token claims and refresh token claims /// /// /// public class DefaultClaimsProvider : IClaimsProvider { /// - /// Provide claims for access token + /// Provide claims for access token /// /// /// @@ -17,7 +18,7 @@ public virtual IEnumerable ProvideAccessClaims(ClaimsPrincipal user) } /// - /// Provide claims for refresh token + /// Provide claims for refresh token /// /// /// @@ -28,14 +29,11 @@ public virtual IEnumerable ProvideRefreshClaims(ClaimsPrincipal user) private static IEnumerable GetUserClaims(ClaimsPrincipal user) { - Claim? identitfierClaim = user.FindFirst(ClaimTypes.NameIdentifier); - if (identitfierClaim == null) - { - throw new InvalidOperationException("Null identifier claim"); - } - return new List() + var identitfierClaim = user.FindFirst(ClaimTypes.NameIdentifier); + if (identitfierClaim == null) throw new InvalidOperationException("Null identifier claim"); + return new List { - new Claim("id", identitfierClaim.Value), + new("id", identitfierClaim.Value) }; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/IAccessTokenGenerator.cs b/src/Infrastructure/Services/JWT/IAccessTokenGenerator.cs index 875abe347..75f06d9d7 100644 --- a/src/Infrastructure/Services/JWT/IAccessTokenGenerator.cs +++ b/src/Infrastructure/Services/JWT/IAccessTokenGenerator.cs @@ -3,4 +3,4 @@ public interface IAccessTokenGenerator { string GenerateAccessToken(ClaimsPrincipal user); -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/IAccessTokenValidator.cs b/src/Infrastructure/Services/JWT/IAccessTokenValidator.cs index 987627730..f40a45e0f 100644 --- a/src/Infrastructure/Services/JWT/IAccessTokenValidator.cs +++ b/src/Infrastructure/Services/JWT/IAccessTokenValidator.cs @@ -1,7 +1,8 @@ using Microsoft.IdentityModel.Tokens; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public interface IAccessTokenValidator { Task ValidateTokenAsync(string token); -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/IAuthenticator.cs b/src/Infrastructure/Services/JWT/IAuthenticator.cs index 5fea9fc5c..397d47b74 100644 --- a/src/Infrastructure/Services/JWT/IAuthenticator.cs +++ b/src/Infrastructure/Services/JWT/IAuthenticator.cs @@ -1,8 +1,9 @@ using CleanArchitecture.Blazor.Domain.Identity; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public interface IAuthenticator { Task Authenticate(string username, string password); Task Refresh(string refreshToken); -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/IClaimsProvider.cs b/src/Infrastructure/Services/JWT/IClaimsProvider.cs index 84f19af2e..a3de86307 100644 --- a/src/Infrastructure/Services/JWT/IClaimsProvider.cs +++ b/src/Infrastructure/Services/JWT/IClaimsProvider.cs @@ -1,21 +1,22 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + /// -/// Implements to define your claims provider +/// Implements to define your claims provider /// /// public interface IClaimsProvider { /// - /// Use this method to get a list of claims for the given user + /// Use this method to get a list of claims for the given user /// /// /// IEnumerable ProvideAccessClaims(ClaimsPrincipal user); /// - /// Use this method to get a list of claims for the given user + /// Use this method to get a list of claims for the given user /// /// /// IEnumerable ProvideRefreshClaims(ClaimsPrincipal user); -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/ILoginService.cs b/src/Infrastructure/Services/JWT/ILoginService.cs index 2ce83b7bf..abec83281 100644 --- a/src/Infrastructure/Services/JWT/ILoginService.cs +++ b/src/Infrastructure/Services/JWT/ILoginService.cs @@ -1,5 +1,6 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public interface ILoginService { Task LoginAsync(ClaimsPrincipal user); -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/IRefreshTokenGenerator.cs b/src/Infrastructure/Services/JWT/IRefreshTokenGenerator.cs index 1ec203aa9..7246b35d8 100644 --- a/src/Infrastructure/Services/JWT/IRefreshTokenGenerator.cs +++ b/src/Infrastructure/Services/JWT/IRefreshTokenGenerator.cs @@ -1,5 +1,6 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public interface IRefreshTokenGenerator { string GenerateRefreshToken(ClaimsPrincipal user); -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/IRefreshTokenValidator.cs b/src/Infrastructure/Services/JWT/IRefreshTokenValidator.cs index e66b53494..e111df0a9 100644 --- a/src/Infrastructure/Services/JWT/IRefreshTokenValidator.cs +++ b/src/Infrastructure/Services/JWT/IRefreshTokenValidator.cs @@ -1,7 +1,8 @@ using Microsoft.IdentityModel.Tokens; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public interface IRefreshTokenValidator { Task ValidateTokenAsync(string token); -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/ITokenGeneratorService.cs b/src/Infrastructure/Services/JWT/ITokenGeneratorService.cs index 9344d87c4..42e85a718 100644 --- a/src/Infrastructure/Services/JWT/ITokenGeneratorService.cs +++ b/src/Infrastructure/Services/JWT/ITokenGeneratorService.cs @@ -2,4 +2,4 @@ public interface ITokenGeneratorService : IAccessTokenGenerator, IRefreshTokenGenerator { -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/JwtLoginService.cs b/src/Infrastructure/Services/JWT/JwtLoginService.cs index fa768adf7..0cceb52e0 100644 --- a/src/Infrastructure/Services/JWT/JwtLoginService.cs +++ b/src/Infrastructure/Services/JWT/JwtLoginService.cs @@ -1,6 +1,7 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + /// -/// Use this class to log a user in. +/// Use this class to log a user in. /// /// public class JwtLoginService : ILoginService @@ -13,19 +14,18 @@ public JwtLoginService(ITokenGeneratorService tokenGenerator) } /// - /// Use this method to get an access Token and a refresh Token for the given TUser + /// Use this method to get an access Token and a refresh Token for the given TUser /// /// - /// An instance of , containing an access Token and a refresh Token + /// An instance of , containing an access Token and a refresh Token public Task LoginAsync(ClaimsPrincipal user) { var accessToken = tokenGenerator.GenerateAccessToken(user); var refreshToken = tokenGenerator.GenerateRefreshToken(user); - return Task.FromResult(new AuthenticatedUserResponse() + return Task.FromResult(new AuthenticatedUserResponse { AccessToken = accessToken, - RefreshToken = refreshToken, + RefreshToken = refreshToken }); } -} - +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/JwtSigningOptions.cs b/src/Infrastructure/Services/JWT/JwtSigningOptions.cs index 7a913641d..0b5f41e57 100644 --- a/src/Infrastructure/Services/JWT/JwtSigningOptions.cs +++ b/src/Infrastructure/Services/JWT/JwtSigningOptions.cs @@ -1,23 +1,27 @@ using Microsoft.IdentityModel.Tokens; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + /// -/// Signing options for Jwt +/// Signing options for Jwt /// public class JwtSigningOptions { /// - /// The signing key that is used to sign the content of generated tokens. + /// The signing key that is used to sign the content of generated tokens. /// - public SecurityKey? SigningKey { get; set; } + public SecurityKey? SigningKey { get; set; } /// - /// To use symmetric HMAC signing and verification, the following algorithms may be used: 'HS256', 'HS384', 'HS512'. - /// When an HMAC algorithm is chosen, the SigningKey setting will be used as both the signing key and the verifying key. - /// To use asymmetric RSA signing and verification, the following algorithms may be used: 'RS256', 'RS384', 'RS512'. - /// When an RSA algorithm is chosen, the SigningKey setting must be set to an RsaSecurityKey that contains an RSA private key. - /// Likewise, the TokenValidationParammeters setting must be set to an RsaSecurityKey that contains an RSA public key. + /// To use symmetric HMAC signing and verification, the following algorithms may be used: 'HS256', 'HS384', 'HS512'. + /// When an HMAC algorithm is chosen, the SigningKey setting will be used as both the signing key and the verifying + /// key. + /// To use asymmetric RSA signing and verification, the following algorithms may be used: 'RS256', 'RS384', 'RS512'. + /// When an RSA algorithm is chosen, the SigningKey setting must be set to an RsaSecurityKey that contains an RSA + /// private key. + /// Likewise, the TokenValidationParammeters setting must be set to an RsaSecurityKey that contains an RSA public key. /// public string Algorithm { get; set; } = SecurityAlgorithms.HmacSha256; + public int ExpirationMinutes { get; set; } = 120; -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/RefreshTokenGenerator.cs b/src/Infrastructure/Services/JWT/RefreshTokenGenerator.cs index 3cb088085..b28aaae71 100644 --- a/src/Infrastructure/Services/JWT/RefreshTokenGenerator.cs +++ b/src/Infrastructure/Services/JWT/RefreshTokenGenerator.cs @@ -5,8 +5,8 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; public class RefreshTokenGenerator : IRefreshTokenGenerator { - private readonly JwtSecurityTokenHandler _tokenHandler; private readonly SimpleJwtOptions _options; + private readonly JwtSecurityTokenHandler _tokenHandler; public RefreshTokenGenerator(JwtSecurityTokenHandler tokenHandler, IOptions options) { @@ -28,4 +28,4 @@ public string GenerateRefreshToken(ClaimsPrincipal user) ); return _tokenHandler.WriteToken(new JwtSecurityToken(header, payload)); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/RefreshTokenNotFoundException.cs b/src/Infrastructure/Services/JWT/RefreshTokenNotFoundException.cs index 6445c2927..fce241f36 100644 --- a/src/Infrastructure/Services/JWT/RefreshTokenNotFoundException.cs +++ b/src/Infrastructure/Services/JWT/RefreshTokenNotFoundException.cs @@ -1,4 +1,5 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public class RefreshTokenNotFoundException : Exception { public RefreshTokenNotFoundException() @@ -14,4 +15,4 @@ public RefreshTokenNotFoundException(string message, Exception inner) : base(message, inner) { } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/RefreshTokenValidator.cs b/src/Infrastructure/Services/JWT/RefreshTokenValidator.cs index 32ed7ae75..2b6765fae 100644 --- a/src/Infrastructure/Services/JWT/RefreshTokenValidator.cs +++ b/src/Infrastructure/Services/JWT/RefreshTokenValidator.cs @@ -1,10 +1,10 @@ using System.IdentityModel.Tokens.Jwt; - using Microsoft.IdentityModel.Tokens; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + /// -/// Use this class to validate refresh tokens +/// Use this class to validate refresh tokens /// public class RefreshTokenValidator : IRefreshTokenValidator { @@ -15,36 +15,30 @@ public RefreshTokenValidator(JwtSecurityTokenHandler tokenHandler, IOptions - /// Validate a refresh token + /// Validate a refresh token /// /// /// public async Task ValidateTokenAsync(string token) { - // if not exists: return invalid validation result. if (token is null) - { return new TokenValidationResult { IsValid = false, - Exception = new RefreshTokenNotFoundException("Refresh token might be invalid or expired"), + Exception = new RefreshTokenNotFoundException("Refresh token might be invalid or expired") }; - } // if jwt is invalid: delete token from db? and return validation result. var result = await _tokenHandler.ValidateTokenAsync(token, _validationParameters); if (!result.IsValid) - { // delete token from db // ... return result; - } return result; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/SimpleJwtOptions.cs b/src/Infrastructure/Services/JWT/SimpleJwtOptions.cs index 022cd3783..d35a42813 100644 --- a/src/Infrastructure/Services/JWT/SimpleJwtOptions.cs +++ b/src/Infrastructure/Services/JWT/SimpleJwtOptions.cs @@ -2,45 +2,47 @@ using Microsoft.IdentityModel.Tokens; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public class SimpleJwtOptions { public const string Key = nameof(SimpleJwtOptions); public bool UseCookie { get; set; } = false; - public CookieOptions CookieOptions { get; set; } = new CookieOptions() + + public CookieOptions CookieOptions { get; set; } = new() { HttpOnly = true, - SameSite = SameSiteMode.Lax, + SameSite = SameSiteMode.Lax }; + public string Issuer { get; set; } = "blazorserver"; public string Audience { get; set; } = "blazorserver"; /// - /// Signing options used for signing access jwts + /// Signing options used for signing access jwts /// - public JwtSigningOptions AccessSigningOptions { get; set; } = new JwtSigningOptions() + public JwtSigningOptions AccessSigningOptions { get; set; } = new() { Algorithm = SecurityAlgorithms.HmacSha256, ExpirationMinutes = 120 }; /// - /// Signing options used for signing refresh jwts + /// Signing options used for signing refresh jwts /// - public JwtSigningOptions RefreshSigningOptions { get; set; } = new JwtSigningOptions() + public JwtSigningOptions RefreshSigningOptions { get; set; } = new() { Algorithm = SecurityAlgorithms.HmacSha256, ExpirationMinutes = 1440 }; /// - /// Validation parameters used for verifying access jwts + /// Validation parameters used for verifying access jwts /// public TokenValidationParameters? AccessValidationParameters { get; set; } /// - /// Validation parameters used for verifying refresh jwts + /// Validation parameters used for verifying refresh jwts /// public TokenValidationParameters? RefreshValidationParameters { get; set; } -} - +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/TokenGeneratorService.cs b/src/Infrastructure/Services/JWT/TokenGeneratorService.cs index 08cb9caf9..a02081286 100644 --- a/src/Infrastructure/Services/JWT/TokenGeneratorService.cs +++ b/src/Infrastructure/Services/JWT/TokenGeneratorService.cs @@ -5,7 +5,8 @@ public class TokenGeneratorService : ITokenGeneratorService protected readonly IAccessTokenGenerator _accessTokenGenerator; protected readonly IRefreshTokenGenerator _refreshTokenGenerator; - public TokenGeneratorService(IAccessTokenGenerator accessTokenGenerator, IRefreshTokenGenerator refreshTokenGenerator) + public TokenGeneratorService(IAccessTokenGenerator accessTokenGenerator, + IRefreshTokenGenerator refreshTokenGenerator) { _accessTokenGenerator = accessTokenGenerator; _refreshTokenGenerator = refreshTokenGenerator; @@ -20,4 +21,4 @@ public string GenerateRefreshToken(ClaimsPrincipal user) { return _refreshTokenGenerator.GenerateRefreshToken(user); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/MailService.cs b/src/Infrastructure/Services/MailService.cs index 3f39d60a4..636fbcaa0 100644 --- a/src/Infrastructure/Services/MailService.cs +++ b/src/Infrastructure/Services/MailService.cs @@ -12,11 +12,12 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services; public class MailService : IMailService { + private const string TemplatePath = "Server.UI.Resources.EmailTemplates.{0}.cshtml"; private readonly AppConfigurationSettings _appConfig; private readonly IFluentEmail _fluentEmail; private readonly ILogger _logger; private readonly AsyncRetryPolicy _policy; - private const string TemplatePath = "Server.UI.Resources.EmailTemplates.{0}.cshtml"; + public MailService( AppConfigurationSettings appConfig, IFluentEmail fluentEmail, @@ -25,7 +26,8 @@ public MailService( _appConfig = appConfig; _fluentEmail = fluentEmail; _logger = logger; - _policy = Policy.Handle().WaitAndRetryAsync(2, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt) / 2)); + _policy = Policy.Handle() + .WaitAndRetryAsync(2, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt) / 2)); } public Task SendAsync(string to, string subject, string body) @@ -33,22 +35,16 @@ public Task SendAsync(string to, string subject, string body) try { if (_appConfig.Resilience) - { return _policy.ExecuteAsync(() => _fluentEmail + .To(to) + .Subject(subject) + .Body(body, true) + .SendAsync()); + return _fluentEmail .To(to) .Subject(subject) .Body(body, true) - .SendAsync()); - } - else - { - return _fluentEmail - .To(to) - .Subject(subject) - .Body(body, true) - .SendAsync(); - } - + .SendAsync(); } catch (Exception e) { @@ -56,31 +52,29 @@ public Task SendAsync(string to, string subject, string body) throw; } } + public Task SendAsync(string to, string subject, string template, object model) { try { if (_appConfig.Resilience) - { return _policy.ExecuteAsync(() => _fluentEmail .To(to) .Subject(subject) - .UsingTemplateFromEmbedded(string.Format(TemplatePath, template), model, Assembly.GetEntryAssembly()) + .UsingTemplateFromEmbedded(string.Format(TemplatePath, template), model, + Assembly.GetEntryAssembly()) .SendAsync()); - } - else - { - return _fluentEmail - .To(to) - .Subject(subject) - .UsingTemplateFromEmbedded(string.Format(TemplatePath, template), model, Assembly.GetEntryAssembly()) - .SendAsync(); - } + return _fluentEmail + .To(to) + .Subject(subject) + .UsingTemplateFromEmbedded(string.Format(TemplatePath, template), model, Assembly.GetEntryAssembly()) + .SendAsync(); } catch (Exception e) { - _logger.LogError(e, "Error sending an email to {Unknown} with subject {Subject} and template {Template}", to, subject, template); + _logger.LogError(e, "Error sending an email to {Unknown} with subject {Subject} and template {Template}", + to, subject, template); throw; } } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/MultiTenant/TenantProvider.cs b/src/Infrastructure/Services/MultiTenant/TenantProvider.cs index fd55b60a8..bf36537f8 100644 --- a/src/Infrastructure/Services/MultiTenant/TenantProvider.cs +++ b/src/Infrastructure/Services/MultiTenant/TenantProvider.cs @@ -1,28 +1,26 @@ using CleanArchitecture.Blazor.Application.Common.Interfaces.MultiTenant; namespace CleanArchitecture.Blazor.Infrastructure.Services.MultiTenant; + public sealed class TenantProvider : ITenantProvider { private readonly IDictionary _callbacks = new Dictionary(); public string? TenantId { get; set; } public string? TenantName { get; set; } + public void Unregister(Guid id) { - if (_callbacks.ContainsKey(id)) - { - _callbacks.Remove(id); - } + if (_callbacks.ContainsKey(id)) _callbacks.Remove(id); } + public void Clear() { _callbacks.Clear(); } + public void Update() { - foreach (var callback in _callbacks.Values) - { - callback(); - } + foreach (var callback in _callbacks.Values) callback(); } public Guid Register(Action callback) @@ -31,4 +29,4 @@ public Guid Register(Action callback) _callbacks.Add(id, callback); return id; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/PDFService.cs b/src/Infrastructure/Services/PDFService.cs index 97bdb325d..f4731f760 100644 --- a/src/Infrastructure/Services/PDFService.cs +++ b/src/Infrastructure/Services/PDFService.cs @@ -20,125 +20,134 @@ public async Task ExportAsync(IEnumerable data var stream = new MemoryStream(); //QuestPDF.Settings.DocumentLayoutExceptionThreshold = 1000; Document.Create(container => + { + container.Page(page => { - container.Page(page => - { - page.Size(landscape? PageSizes.A4.Landscape() : PageSizes.A4); - page.Margin(MarginPTs, Unit.Point); - page.PageColor(QuestPDF.Helpers.Colors.White); - page.DefaultTextStyle(x => x.FontSize(FontSize).FontFamily(FontFamilyName).Fallback(TextStyle.Default.FontFamily("simhei"))); - - page.Header() - .Text(title) - .SemiBold().FontSize(16).FontColor(QuestPDF.Helpers.Colors.Black); - - page.Content() - .PaddingVertical(5, Unit.Millimetre) - .Table(table => + page.Size(landscape ? PageSizes.A4.Landscape() : PageSizes.A4); + page.Margin(MarginPTs); + page.PageColor(Colors.White); + page.DefaultTextStyle(x => + x.FontSize(FontSize).FontFamily(FontFamilyName) + .Fallback(TextStyle.Default.FontFamily("simhei"))); + + page.Header() + .Text(title) + .SemiBold().FontSize(16).FontColor(Colors.Black); + + page.Content() + .PaddingVertical(5, Unit.Millimetre) + .Table(table => + { + var headers = mappers.Keys.Select(x => x).ToList(); + var dataList = data.ToList(); + + // Rough fit columns calculation + var tableWidth = landscape + ? (int)(PageSizes.A4.Landscape().Width - MarginPTs * 2) + : (int)(PageSizes.A4.Width - MarginPTs * 2); + var columnsWidth = new int[headers.Count]; + + for (uint c = 0; c < headers.Count; c++) { - var headers = mappers.Keys.Select(x => x).ToList(); - var dataList = data.ToList(); + var cellWidth = Math.Max(MinCharsPerCell, + Math.Min($"{headers[(int)c]}".Length, MaxCharsPerCell)); - // Rough fit columns calculation - int tableWidth = landscape ? (int)(PageSizes.A4.Landscape().Width - (MarginPTs * 2)) : (int)(PageSizes.A4.Width - (MarginPTs * 2)); - int[] columnsWidth = new int[headers.Count]; + if (columnsWidth[c] < cellWidth) + columnsWidth[c] = cellWidth; + } - for (uint c = 0; c < headers.Count; c++) - { - var cellWidth = Math.Max(MinCharsPerCell, Math.Min($"{headers[(int)c]}".Length,MaxCharsPerCell)); + foreach (var item in dataList) + { + var result = headers.Select(header => mappers[header](item)); + uint c = 0; + foreach (var value in result) + { + var cellWidth = Math.Max(MinCharsPerCell, + Math.Min($"{value}".Length, MaxCharsPerCell)); if (columnsWidth[c] < cellWidth) columnsWidth[c] = cellWidth; + c += 1; } + } - foreach (var item in dataList) - { - var result = headers.Select(header => mappers[header](item)); - - uint c = 0; - foreach (var value in result) - { - var cellWidth = Math.Max(MinCharsPerCell, Math.Min($"{value}".Length, MaxCharsPerCell)); - if (columnsWidth[c] < cellWidth) - columnsWidth[c] = cellWidth; - c += 1; - } - } - - int sumWidth = columnsWidth.Sum(); - float ratio = (float)tableWidth / (float)sumWidth; - for (int i = 0;i < columnsWidth.Length; i++) - columnsWidth[i] = (int)(columnsWidth[i] * ratio); + var sumWidth = columnsWidth.Sum(); + var ratio = tableWidth / (float)sumWidth; + for (var i = 0; i < columnsWidth.Length; i++) + columnsWidth[i] = (int)(columnsWidth[i] * ratio); - // Create columns - table.ColumnsDefinition(columns => - { - for(uint c=0; c + { + for (uint c = 0; c < headers.Count; c++) { - uint colIndex = 1; - rowIndex++; - - var result = headers.Select(header => mappers[header](item)); - - foreach (var value in result) - { - if (IsNumber(value)) - table.Cell().Row(rowIndex).Column(colIndex).Element(BlockCell).AlignRight().Text($"{value}"); - else - table.Cell().Row(rowIndex).Column(colIndex).Element(BlockCell).AlignLeft().Text($"{value}"); ; - - colIndex+=1; - } + columns.ConstantColumn(columnsWidth[c]); + table.Cell().Row(1).Column(c + 1).Element(BlockHeader).Text(headers[(int)c]); } }); - page.Footer() - .AlignRight() - .Text(x => + // Create rows + uint rowIndex = 1; + foreach (var item in dataList) { - x.Span("Page "); - x.CurrentPageNumber(); - x.Span(" of "); - x.TotalPages(); - }); - }); - }) + uint colIndex = 1; + rowIndex++; + + var result = headers.Select(header => mappers[header](item)); + + foreach (var value in result) + { + if (IsNumber(value)) + table.Cell().Row(rowIndex).Column(colIndex).Element(BlockCell).AlignRight() + .Text($"{value}"); + else + table.Cell().Row(rowIndex).Column(colIndex).Element(BlockCell).AlignLeft() + .Text($"{value}"); + ; + + colIndex += 1; + } + } + }); + + page.Footer() + .AlignRight() + .Text(x => + { + x.Span("Page "); + x.CurrentPageNumber(); + x.Span(" of "); + x.TotalPages(); + }); + }); + }) .GeneratePdf(stream); return await Task.FromResult(stream.ToArray()); } - static bool IsNumber(object? value) + private static bool IsNumber(object? value) { if (value == null) return false; return value is sbyte or byte or short or ushort or int or uint or long or ulong or float or double or decimal; } - static IContainer BlockCell(IContainer container) + private static IContainer BlockCell(IContainer container) { return container .Border(1) - .Background(QuestPDF.Helpers.Colors.White) + .Background(Colors.White) .Padding(1, Unit.Millimetre) .ShowOnce() .AlignMiddle(); } - static IContainer BlockHeader(IContainer container) + private static IContainer BlockHeader(IContainer container) { return container .Border(1) - .Background(QuestPDF.Helpers.Colors.Grey.Lighten3) + .Background(Colors.Grey.Lighten3) .Padding(1, Unit.Millimetre) .AlignCenter() .AlignMiddle(); diff --git a/src/Infrastructure/Services/PaddleOCR/DocumentOcrJob.cs b/src/Infrastructure/Services/PaddleOCR/DocumentOcrJob.cs index 84f50f9c7..d2a3d9b43 100644 --- a/src/Infrastructure/Services/PaddleOCR/DocumentOcrJob.cs +++ b/src/Infrastructure/Services/PaddleOCR/DocumentOcrJob.cs @@ -3,19 +3,21 @@ using System.Diagnostics; using System.Drawing; +using System.Net; using System.Text.Json; using CleanArchitecture.Blazor.Application.Common.Interfaces.Serialization; using CleanArchitecture.Blazor.Application.Features.Documents.Caching; using CleanArchitecture.Blazor.Domain.Common.Enums; namespace CleanArchitecture.Blazor.Infrastructure.Services.PaddleOCR; + public class DocumentOcrJob : IDocumentOcrJob { - private readonly IApplicationHubWrapper _notificationService; private readonly IApplicationDbContext _context; private readonly IHttpClientFactory _httpClientFactory; - private readonly ISerializer _serializer; private readonly ILogger _logger; + private readonly IApplicationHubWrapper _notificationService; + private readonly ISerializer _serializer; private readonly Stopwatch _timer; public DocumentOcrJob( @@ -32,26 +34,12 @@ public DocumentOcrJob( _logger = logger; _timer = new Stopwatch(); } - private string ReadBase64String(string path) - { - using (Image image = Image.FromFile(path)) - { - using (MemoryStream m = new MemoryStream()) - { - image.Save(m, image.RawFormat); - byte[] imageBytes = m.ToArray(); - - // Convert byte[] to Base64 String - string base64String = Convert.ToBase64String(imageBytes); - return base64String; - } - } - } public void Do(int id) { Recognition(id, CancellationToken.None).Wait(); } + public async Task Recognition(int id, CancellationToken cancellationToken) { try @@ -71,10 +59,11 @@ public async Task Recognition(int id, CancellationToken cancellationToken) using var fileStream = new FileStream(imgFile, FileMode.Open); using var fileContent = new StreamContent(fileStream); - form.Add(fileContent, "file", Path.GetFileName(imgFile)); // "image" is the form parameter name for the file + form.Add(fileContent, "file", + Path.GetFileName(imgFile)); // "image" is the form parameter name for the file var response = await client.PostAsync("", form); - if (response.StatusCode == System.Net.HttpStatusCode.OK) + if (response.StatusCode == HttpStatusCode.OK) { var result = await response.Content.ReadAsStringAsync(); var ocrResult = JsonSerializer.Deserialize(result); @@ -83,32 +72,46 @@ public async Task Recognition(int id, CancellationToken cancellationToken) if (ocrResult is not null) { var content = string.Join(',', ocrResult.data); - doc.Description = $"recognize the result: success"; + doc.Description = "recognize the result: success"; doc.Content = content; } + await _context.SaveChangesAsync(cancellationToken); await _notificationService.JobCompleted(doc.Title!); DocumentCacheKey.SharedExpiryTokenSource().Cancel(); _timer.Stop(); var elapsedMilliseconds = _timer.ElapsedMilliseconds; - _logger.LogInformation("Id: {Id}, elapsed: {ElapsedMilliseconds}, recognize the result: {@Result},{@Content}", id, elapsedMilliseconds, ocrResult, doc.Content); - + _logger.LogInformation( + "Id: {Id}, elapsed: {ElapsedMilliseconds}, recognize the result: {@Result},{@Content}", id, + elapsedMilliseconds, ocrResult, doc.Content); } - } } catch (Exception ex) { _logger.LogError(ex, "{Id}: recognize error {ExMessage}", id, ex.Message); } - } + private string ReadBase64String(string path) + { + using (var image = Image.FromFile(path)) + { + using (var m = new MemoryStream()) + { + image.Save(m, image.RawFormat); + var imageBytes = m.ToArray(); + + // Convert byte[] to Base64 String + var base64String = Convert.ToBase64String(imageBytes); + return base64String; + } + } + } } #pragma warning disable CS8981 internal class OcrResult { public string[] data { get; set; } = Array.Empty(); } -#pragma warning restore CS8981 - +#pragma warning restore CS8981 \ No newline at end of file diff --git a/src/Infrastructure/Services/Serialization/SystemTextJsonSerializer.cs b/src/Infrastructure/Services/Serialization/SystemTextJsonSerializer.cs index 291684c2d..52786b1d3 100644 --- a/src/Infrastructure/Services/Serialization/SystemTextJsonSerializer.cs +++ b/src/Infrastructure/Services/Serialization/SystemTextJsonSerializer.cs @@ -2,13 +2,26 @@ using CleanArchitecture.Blazor.Application.Common.Interfaces.Serialization; namespace CleanArchitecture.Blazor.Infrastructure.Services.Serialization; + internal sealed class SystemTextJsonSerializer : ISerializer { - public string Serialize(T value) where T : class => JsonSerializer.Serialize(value, DefaultJsonSerializerOptions.Options); + public string Serialize(T value) where T : class + { + return JsonSerializer.Serialize(value, DefaultJsonSerializerOptions.Options); + } - public T? Deserialize(string value) where T : class => JsonSerializer.Deserialize(value, DefaultJsonSerializerOptions.Options); + public T? Deserialize(string value) where T : class + { + return JsonSerializer.Deserialize(value, DefaultJsonSerializerOptions.Options); + } - public byte[] SerializeBytes(T value) where T : class => JsonSerializer.SerializeToUtf8Bytes(value, DefaultJsonSerializerOptions.Options); + public byte[] SerializeBytes(T value) where T : class + { + return JsonSerializer.SerializeToUtf8Bytes(value, DefaultJsonSerializerOptions.Options); + } - public T? DeserializeBytes(byte[] value) where T : class => JsonSerializer.Deserialize(value, DefaultJsonSerializerOptions.Options); -} + public T? DeserializeBytes(byte[] value) where T : class + { + return JsonSerializer.Deserialize(value, DefaultJsonSerializerOptions.Options); + } +} \ No newline at end of file diff --git a/src/Infrastructure/Services/UploadService.cs b/src/Infrastructure/Services/UploadService.cs index a54838ab7..0cbe50ad2 100644 --- a/src/Infrastructure/Services/UploadService.cs +++ b/src/Infrastructure/Services/UploadService.cs @@ -7,6 +7,8 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services; public class UploadService : IUploadService { + private static readonly string NumberPattern = " ({0})"; + public async Task UploadAsync(UploadRequest request) { if (request.Data == null) return string.Empty; @@ -16,7 +18,7 @@ public async Task UploadAsync(UploadRequest request) var folder = request.UploadType.GetDescription(); var folderName = Path.Combine("Files", folder); var pathToSave = Path.Combine(Directory.GetCurrentDirectory(), folderName); - bool exists = Directory.Exists(pathToSave); + var exists = Directory.Exists(pathToSave); if (!exists) Directory.CreateDirectory(pathToSave); var fileName = request.FileName.Trim('"'); var fullPath = Path.Combine(pathToSave, fileName); @@ -26,19 +28,17 @@ public async Task UploadAsync(UploadRequest request) dbPath = NextAvailableFilename(dbPath); fullPath = NextAvailableFilename(fullPath); } + using (var stream = new FileStream(fullPath, FileMode.Create)) { await streamData.CopyToAsync(stream); } + return dbPath; } - else - { - return string.Empty; - } - } - private static readonly string NumberPattern = " ({0})"; + return string.Empty; + } public static string NextAvailableFilename(string path) { @@ -56,7 +56,7 @@ public static string NextAvailableFilename(string path) private static string GetNextFilename(string pattern) { - string tmp = string.Format(pattern, 1); + var tmp = string.Format(pattern, 1); //if (tmp == pattern) //throw new ArgumentException("The pattern must include an index place-holder", "pattern"); @@ -73,7 +73,7 @@ private static string GetNextFilename(string pattern) while (max != min + 1) { - int pivot = (max + min) / 2; + var pivot = (max + min) / 2; if (File.Exists(string.Format(pattern, pivot))) min = pivot; else @@ -82,4 +82,4 @@ private static string GetNextFilename(string pattern) return string.Format(pattern, max); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/ValidationService.cs b/src/Infrastructure/Services/ValidationService.cs index 001c4c674..c32572a59 100644 --- a/src/Infrastructure/Services/ValidationService.cs +++ b/src/Infrastructure/Services/ValidationService.cs @@ -3,6 +3,7 @@ using FluentValidation.Internal; namespace CleanArchitecture.Blazor.Infrastructure.Services; + public class ValidationService : IValidationService { private readonly IServiceProvider _serviceProvider; @@ -19,13 +20,18 @@ public ValidationService(IServiceProvider serviceProvider) } public Func>> ValidateValue() - => async (model, propertyName) - => await ValidatePropertyAsync((TRequest)model, propertyName); + { + return async (model, propertyName) + => await ValidatePropertyAsync((TRequest)model, propertyName); + } public Func>> ValidateValue(TRequest _) - => ValidateValue(); + { + return ValidateValue(); + } - public async Task> ValidateAsync(TRequest model, CancellationToken cancellationToken = default) + public async Task> ValidateAsync(TRequest model, + CancellationToken cancellationToken = default) { var validators = _serviceProvider.GetServices>(); @@ -34,7 +40,8 @@ public async Task> ValidateAsync(TReques return (await validators.ValidateAsync(context, cancellationToken)).ToDictionary(); } - public async Task> ValidateAsync(TRequest model, Action> options, CancellationToken cancellationToken = default) + public async Task> ValidateAsync(TRequest model, + Action> options, CancellationToken cancellationToken = default) { var validators = _serviceProvider.GetServices>(); @@ -44,14 +51,12 @@ public async Task> ValidateAsync(TReques return (await validators.ValidateAsync(context, cancellationToken)).ToDictionary(); } - public async Task> ValidatePropertyAsync(TRequest model, string propertyName, CancellationToken cancellationToken = default) + public async Task> ValidatePropertyAsync(TRequest model, string propertyName, + CancellationToken cancellationToken = default) { var validationResult = await ValidateAsync(model, - options => - { - options.IncludeProperties(propertyName); - }, cancellationToken); + options => { options.IncludeProperties(propertyName); }, cancellationToken); return validationResult.Where(x => x.Key == propertyName).SelectMany(x => x.Value); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/_Imports.cs b/src/Infrastructure/_Imports.cs index 1bc80cfbb..fce16c5ff 100644 --- a/src/Infrastructure/_Imports.cs +++ b/src/Infrastructure/_Imports.cs @@ -16,4 +16,4 @@ global using Microsoft.EntityFrameworkCore; global using Microsoft.Extensions.DependencyInjection; global using Microsoft.Extensions.Logging; -global using Microsoft.Extensions.Options; +global using Microsoft.Extensions.Options; \ No newline at end of file diff --git a/src/Migrators/Migrators.MSSQL/Migrators.MSSQL.csproj b/src/Migrators/Migrators.MSSQL/Migrators.MSSQL.csproj index 942e1d03f..d534cb8aa 100644 --- a/src/Migrators/Migrators.MSSQL/Migrators.MSSQL.csproj +++ b/src/Migrators/Migrators.MSSQL/Migrators.MSSQL.csproj @@ -1,16 +1,16 @@  - - net8.0 - enable - enable - CleanArchitecture.Blazor.Migrators.MSSQL - CleanArchitecture.Blazor.Migrators.MSSQL - default - + + net8.0 + enable + enable + CleanArchitecture.Blazor.Migrators.MSSQL + CleanArchitecture.Blazor.Migrators.MSSQL + default + - - - + + + diff --git a/src/Migrators/Migrators.PostgreSQL/Migrators.PostgreSQL.csproj b/src/Migrators/Migrators.PostgreSQL/Migrators.PostgreSQL.csproj index 188634969..0af4538f0 100644 --- a/src/Migrators/Migrators.PostgreSQL/Migrators.PostgreSQL.csproj +++ b/src/Migrators/Migrators.PostgreSQL/Migrators.PostgreSQL.csproj @@ -1,16 +1,16 @@  - - net8.0 - enable - enable - CleanArchitecture.Blazor.Migrators.PostgreSQL - CleanArchitecture.Blazor.Migrators.PostgreSQL - default - + + net8.0 + enable + enable + CleanArchitecture.Blazor.Migrators.PostgreSQL + CleanArchitecture.Blazor.Migrators.PostgreSQL + default + - - - + + + diff --git a/src/Migrators/Migrators.SqLite/Migrators.SqLite.csproj b/src/Migrators/Migrators.SqLite/Migrators.SqLite.csproj index 617ee886e..ebf76a19c 100644 --- a/src/Migrators/Migrators.SqLite/Migrators.SqLite.csproj +++ b/src/Migrators/Migrators.SqLite/Migrators.SqLite.csproj @@ -1,16 +1,16 @@  - - net8.0 - enable - enable - CleanArchitecture.Blazor.Migrators.SqLite - CleanArchitecture.Blazor.Migrators.SqLite - default - + + net8.0 + enable + enable + CleanArchitecture.Blazor.Migrators.SqLite + CleanArchitecture.Blazor.Migrators.SqLite + default + - - - + + + diff --git a/src/Server.UI/Components/App.razor b/src/Server.UI/Components/App.razor index c46755151..304e7d758 100644 --- a/src/Server.UI/Components/App.razor +++ b/src/Server.UI/Components/App.razor @@ -2,14 +2,14 @@ - - - - - - - - + + + + + + + + - + - + @@ -113,10 +113,10 @@ client_id: auth2Config.clientId, scope: auth2Config.scope, ux_mode: 'popup', - callback: async (response) => { + callback: async response => { const access_token = response.access_token; const url = `https://www.googleapis.com/oauth2/v3/userinfo?access_token=${access_token}`; - const data = await fetch(url).then((response) => response.json()); + const data = await fetch(url).then(response => response.json()); await dotNetHelper.invokeMethodAsync('ConfirmExternal', provider, data.email, data.name, access_token); console.log('login with microsoft success'); localStorage.setItem('google_client_token', access_token); @@ -131,7 +131,7 @@ const client = new msal.PublicClientApplication(msalConfig); const logoutRequest = { account: client.getAccountByHomeId(client_token) - } + }; await client.logoutPopup(logoutRequest); localStorage.removeItem('microsoft_client_token'); @@ -146,4 +146,4 @@ - + \ No newline at end of file diff --git a/src/Server.UI/Components/Autocompletes/MultiTenantAutocomplete.razor.cs b/src/Server.UI/Components/Autocompletes/MultiTenantAutocomplete.razor.cs index 24f0e166c..440740338 100644 --- a/src/Server.UI/Components/Autocompletes/MultiTenantAutocomplete.razor.cs +++ b/src/Server.UI/Components/Autocompletes/MultiTenantAutocomplete.razor.cs @@ -4,8 +4,7 @@ namespace CleanArchitecture.Blazor.Server.UI.Components.Autocompletes; public class MultiTenantAutocomplete : MudAutocomplete { - [Inject] - private ITenantService TenantsService { get; set; } = default!; + [Inject] private ITenantService TenantsService { get; set; } = default!; protected override void OnInitialized() { @@ -42,8 +41,10 @@ private Task> SearchKeyValues(string value, CancellationToke var result = TenantsService.DataSource.OrderBy(x => x.Name).Select(x => x.Id).ToList(); return Task.FromResult>(result); } - return Task.FromResult>(TenantsService.DataSource.Where(x => x.Name!.Contains(value, StringComparison.InvariantCultureIgnoreCase) || - (x.Description != null && x.Description.Contains(value, StringComparison.InvariantCultureIgnoreCase)) + + return Task.FromResult>(TenantsService.DataSource.Where(x => + x.Name!.Contains(value, StringComparison.InvariantCultureIgnoreCase) || + (x.Description != null && x.Description.Contains(value, StringComparison.InvariantCultureIgnoreCase)) ).OrderBy(x => x.Name).Select(x => x.Id).ToList()); } @@ -51,4 +52,4 @@ private string ToTenantNameStringFunc(string val) { return TenantsService.DataSource.Where(x => x.Id == val).Select(x => x.Name).FirstOrDefault() ?? ""; } -} +} \ No newline at end of file diff --git a/src/Server.UI/Components/Autocompletes/PickSuperiorIdAutocomplete.razor.cs b/src/Server.UI/Components/Autocompletes/PickSuperiorIdAutocomplete.razor.cs index 927f35ccb..bc64af1ed 100644 --- a/src/Server.UI/Components/Autocompletes/PickSuperiorIdAutocomplete.razor.cs +++ b/src/Server.UI/Components/Autocompletes/PickSuperiorIdAutocomplete.razor.cs @@ -5,13 +5,12 @@ namespace CleanArchitecture.Blazor.Server.UI.Components.Autocompletes; public class PickSuperiorIdAutocomplete : MudAutocomplete { + private List? _userList; [Parameter] public string? TenantId { get; set; } [Parameter] public string OwnerName { get; set; } = string.Empty; [Inject] private IIdentityService IdentityService { get; set; } = default!; - private List? _userList; - public override Task SetParametersAsync(ParameterView parameters) { SearchFuncWithCancel = SearchKeyValues; @@ -52,13 +51,13 @@ private string ToString(string str) if (_userList is not null && !string.IsNullOrEmpty(str) && _userList.Any(x => x.Id.Equals(str, StringComparison.OrdinalIgnoreCase))) { - ApplicationUserDto userDto = _userList.First(x => x.Id == str); + var userDto = _userList.First(x => x.Id == str); return userDto.UserName; } if (_userList is null && !string.IsNullOrEmpty(str)) { - string userName = IdentityService.GetUserName(str); + var userName = IdentityService.GetUserName(str); return userName; } diff --git a/src/Server.UI/Components/Autocompletes/PickUserAutocomplete.razor.cs b/src/Server.UI/Components/Autocompletes/PickUserAutocomplete.razor.cs index 2a0d68d8f..ab7b8713f 100644 --- a/src/Server.UI/Components/Autocompletes/PickUserAutocomplete.razor.cs +++ b/src/Server.UI/Components/Autocompletes/PickUserAutocomplete.razor.cs @@ -5,13 +5,11 @@ namespace CleanArchitecture.Blazor.Server.UI.Components.Autocompletes; public class PickUserAutocomplete : MudAutocomplete { - [Parameter] - public string TenantId { get; set; } = string.Empty; + private List? _userList; - [Inject] - private IUserDataProvider DataProvider { get; set; } = default!; + [Parameter] public string TenantId { get; set; } = string.Empty; - private List? _userList; + [Inject] private IUserDataProvider DataProvider { get; set; } = default!; public override Task SetParametersAsync(ParameterView parameters) { @@ -31,24 +29,30 @@ private Task> SearchKeyValues(string value, CancellationToke var result = new List(); if (_userList is not null && string.IsNullOrEmpty(value)) - { result = _userList.Select(x => x.UserName).ToList(); - } else if (_userList is not null) - { - result = _userList.Where(x => x.UserName.Contains(value, StringComparison.OrdinalIgnoreCase) || x.Email.Contains(value, StringComparison.OrdinalIgnoreCase)).Select(x => x.UserName).ToList(); - } + result = _userList + .Where(x => x.UserName.Contains(value, StringComparison.OrdinalIgnoreCase) || + x.Email.Contains(value, StringComparison.OrdinalIgnoreCase)).Select(x => x.UserName) + .ToList(); return Task.FromResult(result.AsEnumerable()); } private string ToString(string str) { - if (!string.IsNullOrEmpty(str) && _userList != null && _userList.Any(x => x.DisplayName != null && x.DisplayName.Contains(str, StringComparison.OrdinalIgnoreCase) || x.UserName.Contains(str, StringComparison.OrdinalIgnoreCase))) + if (!string.IsNullOrEmpty(str) && _userList != null && _userList.Any(x => + (x.DisplayName != null && x.DisplayName.Contains(str, StringComparison.OrdinalIgnoreCase)) || + x.UserName.Contains(str, StringComparison.OrdinalIgnoreCase))) { - var userDto = _userList.Find(x => x.DisplayName != null && x.DisplayName.Contains(str, StringComparison.OrdinalIgnoreCase) || x.UserName.Contains(str, StringComparison.OrdinalIgnoreCase)); - return _userList.Find(x => x.DisplayName != null && x.DisplayName.Contains(str, StringComparison.OrdinalIgnoreCase) || x.UserName.Contains(str, StringComparison.OrdinalIgnoreCase))?.DisplayName ?? str; + var userDto = _userList.Find(x => + (x.DisplayName != null && x.DisplayName.Contains(str, StringComparison.OrdinalIgnoreCase)) || + x.UserName.Contains(str, StringComparison.OrdinalIgnoreCase)); + return _userList.Find(x => + (x.DisplayName != null && x.DisplayName.Contains(str, StringComparison.OrdinalIgnoreCase)) || + x.UserName.Contains(str, StringComparison.OrdinalIgnoreCase))?.DisplayName ?? str; } + return str; } } \ No newline at end of file diff --git a/src/Server.UI/Components/Autocompletes/PicklistAutocomplete.razor.cs b/src/Server.UI/Components/Autocompletes/PicklistAutocomplete.razor.cs index de4d4fbd3..8d50b406f 100644 --- a/src/Server.UI/Components/Autocompletes/PicklistAutocomplete.razor.cs +++ b/src/Server.UI/Components/Autocompletes/PicklistAutocomplete.razor.cs @@ -1,16 +1,12 @@ using CleanArchitecture.Blazor.Application.Features.KeyValues.DTOs; - - namespace CleanArchitecture.Blazor.Server.UI.Components.Autocompletes; public class PicklistAutocomplete : MudAutocomplete { - [Parameter] - public Picklist Picklist { get; set; } + [Parameter] public Picklist Picklist { get; set; } - [Inject] - private IPicklistService PicklistService { get; set; } = default!; + [Inject] private IPicklistService PicklistService { get; set; } = default!; protected override async Task OnInitializedAsync() { @@ -53,6 +49,6 @@ private Task> SearchKeyValues(string value) private static bool Contains(KeyValueDto model, string value) { return (model.Value != null && model.Value.Contains(value, StringComparison.InvariantCultureIgnoreCase)) - || (model.Text != null && model.Text.Contains(value, StringComparison.InvariantCultureIgnoreCase)); + || (model.Text != null && model.Text.Contains(value, StringComparison.InvariantCultureIgnoreCase)); } } \ No newline at end of file diff --git a/src/Server.UI/Components/Dialogs/ConfirmationDialog.razor b/src/Server.UI/Components/Dialogs/ConfirmationDialog.razor index a84e55bc1..14cd0920f 100644 --- a/src/Server.UI/Components/Dialogs/ConfirmationDialog.razor +++ b/src/Server.UI/Components/Dialogs/ConfirmationDialog.razor @@ -11,18 +11,19 @@ -@code +@code { - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [Parameter] - public string? ContentText { get; set; } + [Parameter] public string? ContentText { get; set; } private void Submit() { MudDialog.Close(DialogResult.Ok(true)); } - private void Cancel() => MudDialog.Cancel(); + private void Cancel() + { + MudDialog.Cancel(); + } } \ No newline at end of file diff --git a/src/Server.UI/Components/Dialogs/DeleteConfirmation.razor b/src/Server.UI/Components/Dialogs/DeleteConfirmation.razor index 5d15259cf..ea7e9e6bf 100644 --- a/src/Server.UI/Components/Dialogs/DeleteConfirmation.razor +++ b/src/Server.UI/Components/Dialogs/DeleteConfirmation.razor @@ -1,10 +1,11 @@ +@using Severity = Severity @inject IStringLocalizer L @inject IMediator Mediator - + @ConstantString.DeleteConfirmationTitle @@ -19,30 +20,27 @@ @code { - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [EditorRequired] - [Parameter] - public string? ContentText { get; set; } - [EditorRequired] - [Parameter] - public IRequest> Command { get; set; } = default!; + [EditorRequired] [Parameter] public string? ContentText { get; set; } + [EditorRequired] [Parameter] public IRequest> Command { get; set; } = default!; private async Task Submit() { var result = await Mediator.Send(Command); if (result.Succeeded) { - Snackbar.Add($"{ConstantString.DeleteSuccess}", MudBlazor.Severity.Info); + Snackbar.Add($"{ConstantString.DeleteSuccess}", Severity.Info); MudDialog.Close(DialogResult.Ok(true)); } else { - Snackbar.Add($"{result.ErrorMessage}", MudBlazor.Severity.Error); + Snackbar.Add($"{result.ErrorMessage}", Severity.Error); } - } - private void Cancel() => MudDialog.Cancel(); -} + private void Cancel() + { + MudDialog.Cancel(); + } +} \ No newline at end of file diff --git a/src/Server.UI/Components/Dialogs/LogoutConfirmation.razor b/src/Server.UI/Components/Dialogs/LogoutConfirmation.razor index 0c9020a7d..829d00b38 100644 --- a/src/Server.UI/Components/Dialogs/LogoutConfirmation.razor +++ b/src/Server.UI/Components/Dialogs/LogoutConfirmation.razor @@ -1,9 +1,10 @@ +@using Severity = Severity @inject NavigationManager Navigation - + @ConstantString.LogoutConfirmationTitle @@ -17,23 +18,23 @@ -@code +@code { - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [Parameter] - public string? ContentText { get; set; } + [Parameter] public string? ContentText { get; set; } - [Parameter] - public Color Color { get; set; } + [Parameter] public Color Color { get; set; } private Task Submit() { MudDialog.Close(DialogResult.Ok(true)); - Snackbar.Add(@ConstantString.LogoutSuccess, MudBlazor.Severity.Info); + Snackbar.Add(ConstantString.LogoutSuccess, Severity.Info); return Task.CompletedTask; } - private void Cancel() => MudDialog.Cancel(); + private void Cancel() + { + MudDialog.Cancel(); + } } \ No newline at end of file diff --git a/src/Server.UI/Components/Identity/UserLoginState.razor.cs b/src/Server.UI/Components/Identity/UserLoginState.razor similarity index 63% rename from src/Server.UI/Components/Identity/UserLoginState.razor.cs rename to src/Server.UI/Components/Identity/UserLoginState.razor index 68c2557d8..1282ebafb 100644 --- a/src/Server.UI/Components/Identity/UserLoginState.razor.cs +++ b/src/Server.UI/Components/Identity/UserLoginState.razor @@ -1,22 +1,14 @@ -using CleanArchitecture.Blazor.Application.Common.Interfaces.Identity; -using CleanArchitecture.Blazor.Server.UI.Hubs; -using CleanArchitecture.Blazor.Server.UI.Models; -using Microsoft.AspNetCore.Components.Authorization; -using Microsoft.Extensions.Localization; +@using Severity = Severity +@using CleanArchitecture.Blazor.Server.UI.Hubs +@using CleanArchitecture.Blazor.Application.Common.Interfaces.Identity +@implements IDisposable -namespace CleanArchitecture.Blazor.Server.UI.Components.Identity; -public class UserLoginState : ComponentBase, IDisposable -{ - [CascadingParameter] - protected Task AuthState { get; set; } = default!; - [Inject] - private AuthenticationStateProvider AuthenticationStateProvider { get; set; } = default!; - [Inject] - public IDispatcher Dispatcher { get; set; } = null!; - [Inject] - public ISnackbar Snackbar { get; set; } = null!; - [Inject] - public IStringLocalizer L { get; set; } = null!; +@code { + + [CascadingParameter] protected Task AuthState { get; set; } = default!; + [Inject] private AuthenticationStateProvider AuthenticationStateProvider { get; set; } = default!; + [Inject] public IDispatcher Dispatcher { get; set; } = null!; + [Inject] public IStringLocalizer L { get; set; } = null!; public void Dispose() { @@ -25,10 +17,10 @@ public void Dispose() AuthenticationStateProvider.AuthenticationStateChanged -= _authenticationStateProvider_AuthenticationStateChanged; GC.SuppressFinalize(this); } - [Inject] - private HubClient Client { get; set; } = default!; - [Inject] - private IUsersStateContainer UsersStateContainer { get; set; } = default!; + + [Inject] private HubClient Client { get; set; } = default!; + [Inject] private IUsersStateContainer UsersStateContainer { get; set; } = default!; + protected override async Task OnInitializedAsync() { Client.LoginEvent += _client_Login; @@ -56,11 +48,11 @@ private void _client_Logout(object? sender, UserStateChangeEventArgs args) { InvokeAsync(() => { - Snackbar.Add(string.Format(L["{0} has logged out."], args.UserName), Severity.Normal); + Snackbar.Add(string.Format(L["{0} has logged out."], args.UserName)); UsersStateContainer.Remove(args.ConnectionId); - }); } + private void _authenticationStateProvider_AuthenticationStateChanged(Task authenticationState) { InvokeAsync(async () => @@ -73,8 +65,10 @@ private void _authenticationStateProvider_AuthenticationStateChanged(Task LocalizationOptions @inject LayoutService LayoutService @@ -20,7 +16,7 @@ } else { - @language.DisplayName + @language.DisplayName } } } @@ -42,7 +38,7 @@ private async Task ChangeLanguageAsync(string languageCode) { CurrentLanguage = languageCode; - Navigation.NavigateTo(Navigation.BaseUri + "?culture=" + languageCode, forceLoad: true); + Navigation.NavigateTo(Navigation.BaseUri + "?culture=" + languageCode, true); if (new CultureInfo(languageCode).TextInfo.IsRightToLeft) await LayoutService.SetRightToLeft(); diff --git a/src/Server.UI/Components/OptionSelect/MudEnumSelect.razor b/src/Server.UI/Components/OptionSelect/MudEnumSelect.razor index 40d78e474..ae38cb752 100644 --- a/src/Server.UI/Components/OptionSelect/MudEnumSelect.razor +++ b/src/Server.UI/Components/OptionSelect/MudEnumSelect.razor @@ -1,7 +1,6 @@ -@using System.Reflection +@typeparam TEnum +@using System.Reflection @using System.ComponentModel - -@typeparam TEnum @inherits MudSelect @{ @@ -57,9 +56,9 @@ private T SetFlag(T flag, bool set) { - Enum? value = Value as Enum; + var value = Value as Enum; - Type underlyingType = Enum.GetUnderlyingType(EnumOrUnderlyingType!); + var underlyingType = Enum.GetUnderlyingType(EnumOrUnderlyingType!); // note: AsInt mean: math integer vs enum (not the c# int type) dynamic valueAsInt = Convert.ChangeType(value!, underlyingType); @@ -78,9 +77,9 @@ { ChildContent = __builder => { - @foreach (TEnum item in EnumValueList) + @foreach (var item in EnumValueList) { - @(MudEnumSelect.GetDescriptionText(item)) + @GetDescriptionText(item) } }; } diff --git a/src/Server.UI/Components/Redirections/RedirectToHome.razor b/src/Server.UI/Components/Redirections/RedirectToHome.razor new file mode 100644 index 000000000..171b0a147 --- /dev/null +++ b/src/Server.UI/Components/Redirections/RedirectToHome.razor @@ -0,0 +1,10 @@ +@inject NavigationManager NavigationManager + +@code { + + protected override void OnInitialized() + { + NavigationManager.NavigateTo("/", false); + } + +} \ No newline at end of file diff --git a/src/Server.UI/Components/Redirections/RedirectToHome.razor.cs b/src/Server.UI/Components/Redirections/RedirectToHome.razor.cs deleted file mode 100644 index 07b877a25..000000000 --- a/src/Server.UI/Components/Redirections/RedirectToHome.razor.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.AspNetCore.Components.Authorization; - -namespace CleanArchitecture.Blazor.Server.UI.Components.Redirections; - -public class RedirectToHome : ComponentBase -{ - [CascadingParameter] - private Task _authStateTask { get; set; } = null!; - - [Inject] - private NavigationManager NavigationManager { get; set; } = null!; - - protected override async Task OnInitializedAsync() - { - var authState = await _authStateTask; - - if (authState?.User?.Identity is not null && authState.User.Identity.IsAuthenticated) - { - NavigationManager.NavigateTo("/"); - } - } -} diff --git a/src/Server.UI/Components/Redirections/RedirectToLogin.razor b/src/Server.UI/Components/Redirections/RedirectToLogin.razor new file mode 100644 index 000000000..fbb8379f6 --- /dev/null +++ b/src/Server.UI/Components/Redirections/RedirectToLogin.razor @@ -0,0 +1,10 @@ +@inject NavigationManager NavigationManager + +@code { + + protected override void OnInitialized() + { + NavigationManager.NavigateTo("/pages/authentication/login", false); + } + +} \ No newline at end of file diff --git a/src/Server.UI/Components/Redirections/RedirectToLogin.razor.cs b/src/Server.UI/Components/Redirections/RedirectToLogin.razor.cs deleted file mode 100644 index 581fa01fa..000000000 --- a/src/Server.UI/Components/Redirections/RedirectToLogin.razor.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Microsoft.AspNetCore.Components.Authorization; - -namespace CleanArchitecture.Blazor.Server.UI.Components.Redirections; - -public class RedirectToLogin : ComponentBase -{ - [CascadingParameter] - private Task AuthStateTask { get; set; } = null!; - - [Inject] - private NavigationManager NavigationManager { get; set; } = null!; - - protected override async Task OnInitializedAsync() - { - var authState = await AuthStateTask; - if (authState?.User?.Identity is null || !authState.User.Identity.IsAuthenticated) - { - var returnUrl = NavigationManager.ToBaseRelativePath(NavigationManager.Uri); - - if (string.IsNullOrWhiteSpace(returnUrl)) - NavigationManager.NavigateTo("/pages/authentication/login"); - else - NavigationManager.NavigateTo($"/pages/authentication/login?returnUrl={returnUrl}"); - } - } -} \ No newline at end of file diff --git a/src/Server.UI/Components/Routes.razor b/src/Server.UI/Components/Routes.razor index 37e791bbc..e91fb58b1 100644 --- a/src/Server.UI/Components/Routes.razor +++ b/src/Server.UI/Components/Routes.razor @@ -1,101 +1,25 @@ -@using CleanArchitecture.Blazor.Server.UI.Constants -@using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Authentication - - -@inject IStringLocalizer L +@inject IStringLocalizer L @inject NavigationManager NavManager @inject LayoutService LayoutService - - - -
- - - - - - @L["Please wait, we are authorizing you..."] - - - - @if (context.User.Identity?.IsAuthenticated ?? false) - { -

@L["You are not authorized to be here. For more information, contact your system administrator."]

- } - else - { - - } - -
-
-
- - Not found - - -

- @L["Sorry, there's nothing at this address."] @L["Go Home"] -

-
-
-
-
-
-
-
- @code - { - private string _transitionClass = string.Empty; - private bool _isLoaded = true; - - protected override void OnInitialized() - { - _transitionClass = Settings.EnableLoadingScreen ? "loadScreen-initial-hidden" : string.Empty; - if (Settings.EnableLoadingTransitionScreen) - { - NavManager.LocationChanged += HandleLocationChanged; - } - } - - public void Dispose() - { - if (Settings.EnableLoadingTransitionScreen) - { - NavManager.LocationChanged -= HandleLocationChanged; - } - GC.SuppressFinalize(this); - } - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - LayoutService.SetBaseTheme(Theme.ApplicationTheme()); - await LayoutService.ApplyUserPreferences(true); - if (Settings.EnableLoadingScreen) - { - _transitionClass = ""; - _isLoaded = false; - StateHasChanged(); - await Task.Delay(Settings.LoadingScreenDuration >= 0 ? Settings.LoadingScreenDuration : 2000); - _isLoaded = true; - StateHasChanged(); - } - } - } + + + + + + + @L["Please wait, we are authorizing you..."] + + + + + + + + + + +@code +{ - private async void HandleLocationChanged(object? sender, LocationChangedEventArgs e) - { - if (Settings.EnableLoadingTransitionScreen) - { - _transitionClass = ""; - _isLoaded = false; - StateHasChanged(); - await Task.Delay(Settings.LoadingTransitionScreenDuration >= 0 ? Settings.LoadingTransitionScreenDuration : 600); - _isLoaded = true; - StateHasChanged(); - } - } } \ No newline at end of file diff --git a/src/Server.UI/Components/Shared/CustomError.razor b/src/Server.UI/Components/Shared/CustomError.razor index 1d4694db9..79a6743bf 100644 --- a/src/Server.UI/Components/Shared/CustomError.razor +++ b/src/Server.UI/Components/Shared/CustomError.razor @@ -1,6 +1,4 @@ @using System.Net -@using CleanArchitecture.Blazor.Application.Common.ExceptionHandlers - @inject NavigationManager Navigation @inject ILogger Logger @@ -10,20 +8,20 @@
- +
@Message @DateTime.Now - More + More
@Message For more information, contact your system administrator @if (ShowStackTrace) { @StackTrace } - - + +
@@ -33,11 +31,9 @@ @code { - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; - [EditorRequired][Parameter] - public Exception Exception { get; set; } = default!; + [EditorRequired] [Parameter] public Exception Exception { get; set; } = default!; private string? Message { get; set; } private bool ShowStackTrace { get; set; } @@ -57,6 +53,7 @@ { Message = string.Join(", ", e.ErrorMessages.ToArray()); } + break; default: if (Exception.InnerException != null) @@ -66,6 +63,7 @@ Exception = Exception.InnerException; } } + Message = Exception.Message; break; } diff --git a/src/Server.UI/Components/Shared/CustomValidation.razor.cs b/src/Server.UI/Components/Shared/CustomValidation.razor.cs index 76035a8b2..c0581162c 100644 --- a/src/Server.UI/Components/Shared/CustomValidation.razor.cs +++ b/src/Server.UI/Components/Shared/CustomValidation.razor.cs @@ -5,23 +5,20 @@ namespace CleanArchitecture.Blazor.Server.UI.Components.Shared; // See https://docs.microsoft.com/en-us/aspnet/core/blazor/forms-validation?view=aspnetcore-6.0#server-validation-with-a-validator-component public class CustomModelValidation : ComponentBase { - [CascadingParameter] - private EditContext? CurrentEditContext { get; set; } - private ValidationMessageStore? _messageStore; + [CascadingParameter] private EditContext? CurrentEditContext { get; set; } + protected override void OnInitialized() { if (CurrentEditContext is null) - { throw new InvalidOperationException( $"{nameof(CustomModelValidation)} requires a cascading " + $"parameter of type {nameof(EditContext)}. " + $"For example, you can use {nameof(CustomModelValidation)} " + $"inside an {nameof(EditForm)}."); - } - _messageStore = new(CurrentEditContext); + _messageStore = new ValidationMessageStore(CurrentEditContext); CurrentEditContext.OnValidationRequested += (s, e) => _messageStore?.Clear(); @@ -33,10 +30,7 @@ public void DisplayErrors(IDictionary> errors) { if (CurrentEditContext is not null && errors is not null) { - foreach (var err in errors) - { - _messageStore?.Add(CurrentEditContext.Field(err.Key), err.Value); - } + foreach (var err in errors) _messageStore?.Add(CurrentEditContext.Field(err.Key), err.Value); CurrentEditContext.NotifyValidationStateChanged(); } diff --git a/src/Server.UI/Components/Shared/ErrorHandler.razor b/src/Server.UI/Components/Shared/ErrorHandler.razor index 96433ec3c..549a50e4a 100644 --- a/src/Server.UI/Components/Shared/ErrorHandler.razor +++ b/src/Server.UI/Components/Shared/ErrorHandler.razor @@ -1,7 +1,8 @@ -@inherits ErrorBoundary +@using Severity = Severity +@inherits ErrorBoundary @ChildContent -@code +@code { public List ReceivedExceptions = new(); @@ -11,9 +12,10 @@ switch (exception) { case UnauthorizedAccessException: - Snackbar.Add("Authentication Failed", MudBlazor.Severity.Error); + Snackbar.Add("Authentication Failed", Severity.Error); break; } + return Task.CompletedTask; } diff --git a/src/Server.UI/Components/Shared/Layout/HeaderMenu.razor b/src/Server.UI/Components/Shared/Layout/HeaderMenu.razor index c641c02af..d00897917 100644 --- a/src/Server.UI/Components/Shared/Layout/HeaderMenu.razor +++ b/src/Server.UI/Components/Shared/Layout/HeaderMenu.razor @@ -1,4 +1,3 @@ -@using CleanArchitecture.Blazor.Server.UI.Components.Localization @@ -10,7 +9,7 @@ Toggled="NavigationMenuDrawerOpen" ToggledChanged="ToggleNavigationMenuDrawer" ToggledColor="@Color.Default" - ToggledIcon="@Icons.Material.Filled.Close" /> + ToggledIcon="@Icons.Material.Filled.Close"/> @@ -19,24 +18,24 @@ + OnClick="OpenSearchDialog"/> - + + Target="_blank"/> - - - + + + + OnClick="@(e => RightToLeftToggle.InvokeAsync())"/> @@ -45,23 +44,25 @@ + OnClick="OpenSearchDialog"/> - - + + - + - @Settings.Company + + @Settings.Company + -@code +@code { - [EditorRequired][Parameter] public bool IsDarkMode { get; set; } - [EditorRequired][Parameter] public bool NavigationMenuDrawerOpen { get; set; } - [EditorRequired][Parameter] public EventCallback ToggleNavigationMenuDrawer { get; set; } - [EditorRequired][Parameter] public EventCallback OpenSearchDialog { get; set; } - [EditorRequired][Parameter] public bool RightToLeft { get; set; } - [EditorRequired][Parameter] public EventCallback RightToLeftToggle { get; set; } - [Parameter] public EventCallback OnSettingClick { get; set; } + [EditorRequired] [Parameter] public bool IsDarkMode { get; set; } + [EditorRequired] [Parameter] public bool NavigationMenuDrawerOpen { get; set; } + [EditorRequired] [Parameter] public EventCallback ToggleNavigationMenuDrawer { get; set; } + [EditorRequired] [Parameter] public EventCallback OpenSearchDialog { get; set; } + [EditorRequired] [Parameter] public bool RightToLeft { get; set; } + [EditorRequired] [Parameter] public EventCallback RightToLeftToggle { get; set; } + [Parameter] public EventCallback OnSettingClick { get; set; } } \ No newline at end of file diff --git a/src/Server.UI/Components/Shared/Layout/LoadingScreen.razor b/src/Server.UI/Components/Shared/Layout/LoadingScreen.razor index c9047a01f..c0bd29b4b 100644 --- a/src/Server.UI/Components/Shared/Layout/LoadingScreen.razor +++ b/src/Server.UI/Components/Shared/Layout/LoadingScreen.razor @@ -1,5 +1,4 @@ -@using CleanArchitecture.Blazor.Server.UI.Services.Layout -@inherits LayoutComponentBase +@inherits LayoutComponentBase @if (IsLoaded) { @@ -127,14 +126,11 @@ else @code { - [Parameter] - public RenderFragment ChildContent { get; set; } = null!; + [Parameter] public RenderFragment ChildContent { get; set; } = null!; - [Parameter] - public LayoutService LayoutService { get; set; } = null!; + [Parameter] public LayoutService LayoutService { get; set; } = null!; - [Parameter] - public bool IsLoaded { get; set; } + [Parameter] public bool IsLoaded { get; set; } private string Gradient => $"background-image: linear-gradient(-120deg, {(LayoutService.IsDarkMode ? LayoutService.CurrentTheme.PaletteDark.Background : LayoutService.CurrentTheme.Palette.Background)} 50%, {(LayoutService.IsDarkMode ? LayoutService.CurrentTheme.PaletteDark.Surface : LayoutService.CurrentTheme.Palette.Surface)} 50%);"; } \ No newline at end of file diff --git a/src/Server.UI/Components/Shared/Layout/MainLayout.razor b/src/Server.UI/Components/Shared/Layout/MainLayout.razor index 0493050e6..b64109e37 100644 --- a/src/Server.UI/Components/Shared/Layout/MainLayout.razor +++ b/src/Server.UI/Components/Shared/Layout/MainLayout.razor @@ -1,7 +1,7 @@ -@using CleanArchitecture.Blazor.Server.UI.Constants -@using CleanArchitecture.Blazor.Server.UI.Services.UserPreferences +@using Severity = Severity @using Toolbelt.Blazor.HotKeys2 - +@using CleanArchitecture.Blazor.Server.UI.Services.UserPreferences +@using CleanArchitecture.Blazor.Server.UI.Constants @inherits LayoutComponentBase @inject LayoutService LayoutService @@ -9,9 +9,9 @@ @inject IStringLocalizer L - - - + + + @@ -19,12 +19,14 @@
- + @Body - @L["authentication is required, click"] @L["sign in"] -
-
+ + @L["authentication is required, click"] @L["sign in"] + + + @@ -34,14 +36,14 @@ ToggleNavigationMenuDrawer="ToggleNavigationMenuDrawer" RightToLeft="@LayoutService.IsRTL" RightToLeftToggle="LayoutService.ToggleRightToLeft" - OnSettingClick="@(() => _themingDrawerOpen = true)" /> + OnSettingClick="@(() => _themingDrawerOpen = true)"/> + DrawerOpenChanged="NavigationMenuDrawerOpenChangedHandler"/> - + UserPreferencesChanged="LayoutService.UpdateUserPreferences"/> + @@ -54,13 +56,13 @@ - +
-@code +@code { private bool _commandPaletteOpen; private HotKeysContext? _hotKeysContext; @@ -70,7 +72,7 @@ private bool _themingDrawerOpen; private bool _defaultDarkMode; - private ErrorBoundary? _errorBoundary { set; get; } = null!; + private ErrorBoundary? _errorBoundary { set; get; } protected override void OnParametersSet() { @@ -82,6 +84,7 @@ // On each page navigation, reset any error state _errorBoundary?.Recover(); } + public void Dispose() { LayoutService.MajorUpdateOccured -= LayoutServiceOnMajorUpdateOccured; @@ -99,36 +102,46 @@ StateHasChanged(); } } + private async Task ApplyUserPreferences() { _defaultDarkMode = await _mudThemeProvider.GetSystemPreference(); _userPreferences = await LayoutService.ApplyUserPreferences(_defaultDarkMode); } + protected override void OnInitialized() { LayoutService.MajorUpdateOccured += LayoutServiceOnMajorUpdateOccured; LayoutService.SetBaseTheme(Theme.ApplicationTheme()); _hotKeysContext = HotKeys.CreateContext().Add(ModKey.Ctrl, Key.K, async () => await OpenSearchDialog(), "Open command palette."); } + private async Task OnSystemPreferenceChanged(bool newValue) { await LayoutService.OnSystemPreferenceChanged(newValue); } - private void LayoutServiceOnMajorUpdateOccured(object? sender, EventArgs e) => StateHasChanged(); + + private void LayoutServiceOnMajorUpdateOccured(object? sender, EventArgs e) + { + StateHasChanged(); + } protected void NavigationMenuDrawerOpenChangedHandler(bool state) { _navigationMenuDrawerOpen = state; } + protected void ThemingDrawerOpenChangedHandler(bool state) { _themingDrawerOpen = state; } + protected void ToggleNavigationMenuDrawer() { _navigationMenuDrawerOpen = !_navigationMenuDrawerOpen; } + private async Task OpenSearchDialog() { if (!_commandPaletteOpen) diff --git a/src/Server.UI/Components/Shared/Layout/MudBlazorLogo.razor b/src/Server.UI/Components/Shared/Layout/MudBlazorLogo.razor index 868de1c40..9bcdbfc9c 100644 --- a/src/Server.UI/Components/Shared/Layout/MudBlazorLogo.razor +++ b/src/Server.UI/Components/Shared/Layout/MudBlazorLogo.razor @@ -1,9 +1,9 @@ @namespace CleanArchitecture.Blazor.Server.UI.Shared - - - + + + @code diff --git a/src/Server.UI/Components/Shared/Layout/NavigationMenu.razor b/src/Server.UI/Components/Shared/Layout/NavigationMenu.razor index 15512b8e8..12958d97d 100644 --- a/src/Server.UI/Components/Shared/Layout/NavigationMenu.razor +++ b/src/Server.UI/Components/Shared/Layout/NavigationMenu.razor @@ -3,7 +3,7 @@ @inherits FluxorComponent @inject IMenuService MenuService -@inject IState UserProfileState +@inject IState UserProfileState @inject LayoutService LayoutService @inject NavigationManager NavigationManager @inject IStringLocalizer L @@ -33,11 +33,11 @@ @if (IsLoading) { - - - - - + + + + + } else { @@ -194,11 +194,9 @@ else @code { - [EditorRequired][Parameter] - public EventCallback DrawerOpenChanged { get; set; } + [EditorRequired] [Parameter] public EventCallback DrawerOpenChanged { get; set; } - [EditorRequired][Parameter] - public bool DrawerOpen { get; set; } + [EditorRequired] [Parameter] public bool DrawerOpen { get; set; } private UserProfile UserProfile => UserProfileState.Value.UserProfile; private bool IsLoading => UserProfileState.Value.IsLoading; @@ -207,7 +205,7 @@ else private bool Expanded(MenuSectionItemModel menu) { - string href = NavigationManager.Uri[(NavigationManager.BaseUri.Length - 1)..]; + var href = NavigationManager.Uri[(NavigationManager.BaseUri.Length - 1)..]; return menu is { IsParent: true, MenuItems: not null } && menu.MenuItems.Any(x => !string.IsNullOrEmpty(x.Href) && x.Href.Equals(href)); } diff --git a/src/Server.UI/Components/Shared/Layout/NotificationMenu.razor b/src/Server.UI/Components/Shared/Layout/NotificationMenu.razor index 8e3e2e0cd..ce376f3ec 100644 --- a/src/Server.UI/Components/Shared/Layout/NotificationMenu.razor +++ b/src/Server.UI/Components/Shared/Layout/NotificationMenu.razor @@ -6,31 +6,31 @@ - -
- @L["Notifications"] - @L["Mark as read"] -
- @if (_messages != null && _newNotificationsAvailable) - { - @foreach (var (message, isRead) in _messages.Take(5)) + +
+ @L["Notifications"] + @L["Mark as read"] +
+ @if (_messages != null && _newNotificationsAvailable) { - - @message.Title - @($"{message.Authors.FirstOrDefault()?.DisplayName} • {message.PublishDate:MM/dd/yyyy}") - - + @foreach (var (message, isRead) in _messages.Take(5)) + { + + @message.Title + @($"{message.Authors.FirstOrDefault()?.DisplayName} • {message.PublishDate:MM/dd/yyyy}") + + + } } - } - else - { -
- @L["Nothing new :("] - -
- } -
-
+ else + { +
+ @L["Nothing new :("] + +
+ } + +
@code @@ -46,7 +46,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender) { - if (firstRender == true) + if (firstRender) { _newNotificationsAvailable = await NotificationService.AreNewNotificationsAvailable(); _messages = await NotificationService.GetNotifications(); diff --git a/src/Server.UI/Components/Shared/Layout/SearchDialog.razor b/src/Server.UI/Components/Shared/Layout/SearchDialog.razor index 84d5751b9..ff3e34cb6 100644 --- a/src/Server.UI/Components/Shared/Layout/SearchDialog.razor +++ b/src/Server.UI/Components/Shared/Layout/SearchDialog.razor @@ -1,5 +1,4 @@ @using Toolbelt.Blazor.HotKeys2 - @inject IStringLocalizer L @inject HotKeys HotKeys @inject NavigationManager Navigation @@ -11,7 +10,7 @@ Class="mb-3" Clearable="true" Placeholder="@L["Search..."]" - TextChanged="@(SearchPages)" + TextChanged="@(SearchPages)" Immediate="true"/> @@ -19,7 +18,7 @@ { + Text="@key"/> } @@ -29,8 +28,7 @@ @code { - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; private readonly Dictionary _pages = new(); private HotKeysContext? _hotKeysContext; diff --git a/src/Server.UI/Components/Shared/Layout/UserMenu.razor b/src/Server.UI/Components/Shared/Layout/UserMenu.razor index c19d7d0b1..df6178f8c 100644 --- a/src/Server.UI/Components/Shared/Layout/UserMenu.razor +++ b/src/Server.UI/Components/Shared/Layout/UserMenu.razor @@ -1,10 +1,9 @@ -@using CleanArchitecture.Blazor.Infrastructure.Services.JWT; +@using CleanArchitecture.Blazor.Infrastructure.Services.JWT @using CleanArchitecture.Blazor.Server.UI.Services - @inherits FluxorComponent @inject NavigationManager NavigationManager -@inject IState UserProfileState +@inject IState UserProfileState @inject IStringLocalizer L @inject IAccessTokenProvider TokenProvider @@ -21,7 +20,7 @@ @if (IsLoading) { - + } else { @@ -42,18 +41,18 @@
- +
+ Icon="@Icons.Material.Filled.Person"/> @L["Profile"]
- +
+ Icon="@Icons.Material.Filled.Settings"/> @L["Settings"]
@@ -71,12 +70,10 @@ -@code +@code { - [Parameter] - public EventCallback OnSettingClick { get; set; } - [Inject] - public AuthenticationStateProvider AuthenticationStateProvider { get; set; } = null!; + [Parameter] public EventCallback OnSettingClick { get; set; } + [Inject] public AuthenticationStateProvider AuthenticationStateProvider { get; set; } = null!; private bool IsLoading => UserProfileState.Value.IsLoading; private UserProfile UserProfile => UserProfileState.Value.UserProfile; @@ -84,8 +81,8 @@ { var parameters = new DialogParameters { - { x=>x.ContentText, $"{ConstantString.LogoutConfirmation}"}, - { x=>x.Color, Color.Error} + { x => x.ContentText, $"{ConstantString.LogoutConfirmation}" }, + { x => x.Color, Color.Error } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true }; diff --git a/src/Server.UI/Components/Shared/Themes/ThemesButton.razor b/src/Server.UI/Components/Shared/Themes/ThemesButton.razor index 65afe7e03..5c630688d 100644 --- a/src/Server.UI/Components/Shared/Themes/ThemesButton.razor +++ b/src/Server.UI/Components/Shared/Themes/ThemesButton.razor @@ -6,7 +6,7 @@ Placement="Placement.Left" Text="Themes"> + Style="color: #05192d"/> @@ -27,11 +27,9 @@ border-bottom-right-radius: 24px !important; } - } else { - - } @code diff --git a/src/Server.UI/Components/Shared/Themes/ThemesMenu.razor b/src/Server.UI/Components/Shared/Themes/ThemesMenu.razor index 2555819c8..a8706b9e7 100644 --- a/src/Server.UI/Components/Shared/Themes/ThemesMenu.razor +++ b/src/Server.UI/Components/Shared/Themes/ThemesMenu.razor @@ -1,11 +1,9 @@ -@using CleanArchitecture.Blazor.Server.UI.Services @using CleanArchitecture.Blazor.Server.UI.Services.UserPreferences @using System.Globalization - @inject LayoutService LayoutService @inject IStringLocalizer L - @L["Themes"] - + + Size="Size.Small"/> - +
@L["Mode"] @@ -28,42 +26,42 @@ - - - - - - + + + + + + - - - - - + + + + + - - - - - + + + + + @@ -77,11 +75,11 @@ { + FullWidth="true" + OnClick="@(() => UpdateThemePrimaryColor(color))">
+ style="@($"background: {color};")">
@@ -96,7 +94,7 @@ + @oninput="@(e => ChangedSelection(e))"> @UserPreferences.BorderRadius.ToString() @@ -110,7 +108,7 @@ + @oninput="@(e => ChangedFontSize(e))"> @($"{UserPreferences.DefaultFontSize.ToString()} rem") @@ -122,7 +120,7 @@ + VisibleChanged="ThemingDrawerOpenChanged"/> - - -
-
- -
- @Title - - -
+ + +
+
+ +
+ @Title + +
-
+
+
-
-
- - @ConstantString.Refresh - @if (_canCreate) +
+
+ + + @ConstantString.Refresh + + @if (_canCreate) { @ConstantString.New + StartIcon="@Icons.Material.Filled.Add" + Size="Size.Small" + Disabled="@_loading" + OnClick="OnCreate" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.New + @ConstantString.Clone + StartIcon="@Icons.Material.Filled.ContentCopy" + Size="Size.Small" + Disabled="@(_selectedItems.Count != 1)" + OnClick="OnClone" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.Clone + } @if (_canDelete) { @ConstantString.Delete + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnDeleteChecked" + IconColor="Color.Surface"> + @ConstantString.Delete + } @if (_canExport) { - @ConstantString.Export + Label="@ConstantString.Export" + Disabled="@_loading" + StartIcon="@Icons.Custom.FileFormats.FileExcel" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnExport" + IconColor="Color.Surface"> + @ConstantString.Export } @if (_canImport) @@ -106,7 +114,7 @@ for="@context"> @if (_uploading) { - + @ConstantString.Uploading } else @@ -122,29 +130,34 @@ @if (_canCreate) { @ConstantString.New + StartIcon="@Icons.Material.Filled.Add" + Size="Size.Small" + Disabled="@_loading" + OnClick="OnCreate" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.New + } @if (_canDelete) { @ConstantString.Delete + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnDeleteChecked" + IconColor="Color.Surface"> + @ConstantString.Delete + }
@if (_canSearch) { - + + }
@@ -161,11 +174,11 @@ EndIcon="@Icons.Material.Filled.KeyboardArrowDown" IconColor="Color.Info" AnchorOrigin="Origin.CenterLeft"> @if (_canEdit) { - @ConstantString.Edit + @ConstantString.Edit } @if (_canDelete) { - @ConstantString.Delete + @ConstantString.Delete } } @@ -182,53 +195,47 @@ @*TODO: Define the fields that should be displayed in data table*@ - +
- @context.Item.Name - @context.Item.Description -
-
-
- - - - @ConstantString.NoRecords - - - @ConstantString.Loading - - - - - + @context.Item.Name + @context.Item.Description +
+ + + + + @ConstantString.NoRecords + + + @ConstantString.Loading + + + + + - @code { +@code { public string? Title { get; private set; } private int _defaultPageSize = 15; - private HashSet _selectedItems = new HashSet(); + private HashSet _selectedItems = new(); private MudDataGrid _table = default!; private CustomerDto _currentDto = new(); private bool _loading; private bool _uploading; private bool _downloading; private bool _exporting; - [Inject] - private IState UserProfileState { get; set; } = null!; + [Inject] private IState UserProfileState { get; set; } = null!; private UserProfile UserProfile => UserProfileState.Value.UserProfile; - [Inject] - private IMediator Mediator { get; set; } = default!; - [Inject] - private IMapper Mapper { get; set; } = default!; - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [Inject] private IMediator Mediator { get; set; } = default!; + [Inject] private IMapper Mapper { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; - private CustomersWithPaginationQuery Query { get; set; } = new(); - [Inject] - private IBlazorDownloadFileService BlazorDownloadFileService { get; set; } = null!; + private CustomersWithPaginationQuery Query { get; } = new(); + [Inject] private IBlazorDownloadFileService BlazorDownloadFileService { get; set; } = null!; private bool _canSearch; private bool _canCreate; private bool _canEdit; @@ -247,6 +254,7 @@ _canImport = (await AuthService.AuthorizeAsync(state.User, Permissions.Customers.Import)).Succeeded; _canExport = (await AuthService.AuthorizeAsync(state.User, Permissions.Customers.Export)).Succeeded; } + private async Task> ServerReload(GridState state) { try @@ -258,29 +266,31 @@ Query.PageNumber = state.Page + 1; Query.PageSize = state.PageSize; var result = await Mediator.Send(Query).ConfigureAwait(false); - return new GridData() { TotalItems = result.TotalItems, Items = result.Items }; + return new GridData { TotalItems = result.TotalItems, Items = result.Items }; } finally { _loading = false; } - } + private async Task OnSearch(string text) { - _selectedItems = new(); + _selectedItems = new HashSet(); Query.Keyword = text; await _table.ReloadServerData(); } + private async Task OnChangedListView(CustomerListView listview) { Query.ListView = listview; await _table.ReloadServerData(); } + private async Task OnRefresh() { CustomerCacheKey.Refresh(); - _selectedItems = new(); + _selectedItems = new HashSet(); Query.Keyword = string.Empty; await _table.ReloadServerData(); } @@ -289,33 +299,34 @@ { var command = new AddEditCustomerCommand(); var parameters = new DialogParameters - { - { x=>x.model,command }, - }; + { + { x => x.model, command } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true }; var dialog = DialogService.Show - (L["Create a new item"], parameters, options); + (L["Create a new item"], parameters, options); var state = await dialog.Result; if (!state.Canceled) { await _table.ReloadServerData(); } } + private async Task OnClone() { var copyitem = _selectedItems.First(); - var command = new AddEditCustomerCommand() - { - Name = copyitem.Name, - Description = copyitem.Description, - }; + var command = new AddEditCustomerCommand + { + Name = copyitem.Name, + Description = copyitem.Description + }; var parameters = new DialogParameters - { - { x=>x.model,command }, - }; + { + { x => x.model, command } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true }; var dialog = DialogService.Show - (L["Create a new item"], parameters, options); + (L["Create a new item"], parameters, options); var state = await dialog.Result; if (!state.Canceled) { @@ -323,16 +334,17 @@ _selectedItems.Remove(copyitem); } } + private async Task OnEdit(CustomerDto dto) { var command = Mapper.Map(dto); var parameters = new DialogParameters - { - { x=>x.model,command }, - }; + { + { x => x.model, command } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true }; var dialog = DialogService.Show - (L["Edit the item"], parameters, options); + (L["Edit the item"], parameters, options); var state = await dialog.Result; if (!state.Canceled) { @@ -342,12 +354,12 @@ private async Task OnDelete(CustomerDto dto) { - var command = new DeleteCustomerCommand(new int[] { dto.Id }); + var command = new DeleteCustomerCommand(new[] { dto.Id }); var parameters = new DialogParameters - { - { x=>x.Command, command }, - { x=>x.ContentText, string.Format(ConstantString.DeleteConfirmation, dto.Name) } - }; + { + { x => x.Command, command }, + { x => x.ContentText, string.Format(ConstantString.DeleteConfirmation, dto.Name) } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(ConstantString.DeleteConfirmationTitle, parameters, options); var state = await dialog.Result; @@ -362,43 +374,45 @@ { var command = new DeleteCustomerCommand(_selectedItems.Select(x => x.Id).ToArray()); var parameters = new DialogParameters - { - { x=>x.Command, command }, - { x=>x.ContentText, string.Format(ConstantString.DeleteConfirmWithSelected,_selectedItems.Count) } - }; + { + { x => x.Command, command }, + { x => x.ContentText, string.Format(ConstantString.DeleteConfirmWithSelected, _selectedItems.Count) } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(ConstantString.DeleteConfirmationTitle, parameters, options); var state = await dialog.Result; if (!state.Canceled) { await _table.ReloadServerData(); - _selectedItems = new(); + _selectedItems = new HashSet(); } } private async Task OnExport() { _exporting = true; - var request = new ExportCustomersQuery() - { - Keyword = Query.Keyword, - CurrentUser = UserProfile, - ListView = Query.ListView, - OrderBy = _table.SortDefinitions.Values.FirstOrDefault()?.SortBy ?? "Id", - SortDirection = (_table.SortDefinitions.Values.FirstOrDefault()?.Descending ?? true) ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString() - }; + var request = new ExportCustomersQuery + { + Keyword = Query.Keyword, + CurrentUser = UserProfile, + ListView = Query.ListView, + OrderBy = _table.SortDefinitions.Values.FirstOrDefault()?.SortBy ?? "Id", + SortDirection = _table.SortDefinitions.Values.FirstOrDefault()?.Descending ?? true ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString() + }; var result = await Mediator.Send(request); if (result.Succeeded) { - var downloadresult = await BlazorDownloadFileService.DownloadFile($"{L["Customers"]}.xlsx", result.Data, contentType: "application/octet-stream"); - Snackbar.Add($"{ConstantString.ExportSuccess}", MudBlazor.Severity.Info); + var downloadresult = await BlazorDownloadFileService.DownloadFile($"{L["Customers"]}.xlsx", result.Data, "application/octet-stream"); + Snackbar.Add($"{ConstantString.ExportSuccess}", Severity.Info); } else { - Snackbar.Add($"{result.ErrorMessage}", MudBlazor.Severity.Error); + Snackbar.Add($"{result.ErrorMessage}", Severity.Error); } + _exporting = false; } + private async Task OnImportData(IBrowserFile file) { _uploading = true; @@ -409,15 +423,16 @@ if (result.Succeeded) { await _table.ReloadServerData(); - Snackbar.Add($"{ConstantString.ImportSuccess}", MudBlazor.Severity.Info); + Snackbar.Add($"{ConstantString.ImportSuccess}", Severity.Info); } else { foreach (var msg in result.Errors) { - Snackbar.Add($"{msg}", MudBlazor.Severity.Error); + Snackbar.Add($"{msg}", Severity.Error); } } + _uploading = false; } diff --git a/src/Server.UI/Pages/Dashboard/Components/LandingSection.razor b/src/Server.UI/Pages/Dashboard/Components/LandingSection.razor index 4d84d75a5..1cc170137 100644 --- a/src/Server.UI/Pages/Dashboard/Components/LandingSection.razor +++ b/src/Server.UI/Pages/Dashboard/Components/LandingSection.razor @@ -1,5 +1,4 @@ @using MudBlazor.Utilities -
@@ -17,7 +16,7 @@
-@code +@code { [Parameter] public RenderFragment Stripes { get; set; } = null!; [Parameter] public RenderFragment ChildContent { get; set; } = null!; @@ -29,25 +28,25 @@ protected string SectionClassnames => new CssBuilder("mud-landingpage-section") - .AddClass(SectionClass) - .Build(); + .AddClass(SectionClass) + .Build(); protected string BackgroundClassnames => new CssBuilder("section-background d-flex flex-column justify-end") - .AddClass("straight", Straight) - .AddClass("skew", !Straight) - .AddClass(BackgroundClass) - .Build(); + .AddClass("straight", Straight) + .AddClass("skew", !Straight) + .AddClass(BackgroundClass) + .Build(); protected string EndBackgroundClassnames => new CssBuilder("section-background straight-end") - .AddClass(BackgroundClass) - .Build(); + .AddClass(BackgroundClass) + .Build(); protected string ContainerClassnames => new CssBuilder("section-container") - .AddClass("padding-straight", Straight) - .AddClass("padding-skew", !Straight) - .AddClass(Class) - .Build(); + .AddClass("padding-straight", Straight) + .AddClass("padding-skew", !Straight) + .AddClass(Class) + .Build(); } \ No newline at end of file diff --git a/src/Server.UI/Pages/Dashboard/Dashboard.razor b/src/Server.UI/Pages/Dashboard/Dashboard.razor index fc01b3db4..76c983801 100644 --- a/src/Server.UI/Pages/Dashboard/Dashboard.razor +++ b/src/Server.UI/Pages/Dashboard/Dashboard.razor @@ -1,146 +1,148 @@ @page "/" @using MudBlazor.Utilities -@using CleanArchitecture.Blazor.Server.UI.Models -@attribute [Authorize] @Title - + + + + +
-
- -
- Graphite on roof -
- - - - +2.6% -
- 149,567 -
-
- - - - - - - - - - -
-
- -
- Global Spread -
- - - - +9.6% -
- 12% -
-
- - - - - - - - - - +
+ +
+ Graphite on roof +
+ + + + +2.6%
- - -
- Roentgen -
- - - - ~0.0% -
- 3,6 + 149,567 +
+
+ + + + + + + + + + +
+
+ +
+ Global Spread +
+ + + + +9.6%
-
- - - - - - - - - - + 12% +
+
+ + + + + + + + + + +
+ + +
+ Roentgen +
+ + + + ~0.0%
- -
-
- - Uranium-235 -
- - See all 137 reviews -
- This is the type of uranium used in the RBMK reactors. - - Reactor Type -
- RBMK-1000RBMK-1500RBMKP-2400 -
-
- Read More -
-
- @if(IsMobile == false) - { - - + 3,6 +
+
+ + + + + + + + + + +
+
+
+
+ + Uranium-235 +
+ + See all 137 reviews +
+ This is the type of uranium used in the RBMK reactors. + + Reactor Type +
+ RBMK-1000RBMK-1500RBMKP-2400 +
+
+ Read More +
+
+ @if (IsMobile == false) + { + + + + Nr + Sign + Name + Position + Molar mass + + + + @foreach (var item in Elements) + { - Nr - Sign - Name - Position - Molar mass + @item.Number + @item.Sign + @item.Name + @item.Position + @item.Molar - - - @foreach (var item in Elements) - { - - @item.Number - @item.Sign - @item.Name - @item.Position - @item.Molar - - } - - - } -
- @if(IsMobile == false) - { + } + + + } +
+ @if (IsMobile == false) + {
- +
- + MudPay
- +
- - + +
@@ -149,10 +151,10 @@
- - - - + + + +
@@ -164,13 +166,13 @@
- - - - - - - + + + + + + +
@@ -202,63 +204,63 @@
- } -
+ } +
- - - - Global scale - MudBlazor is growing quickly - - We are growing every day, developers from all over the world are using MudBlazor and are engaged with the community. - We are dedicated to improving every aspect of MudBlazor to be your number one choice when looking for a Blazor component library. - Join us and be part of the library’s success! - - - -
- -
-
- -
- @NumericExtensions.RoundedToString(3000) -
- - Total Downloads -
+ + + + Global scale + MudBlazor is growing quickly + + We are growing every day, developers from all over the world are using MudBlazor and are engaged with the community. + We are dedicated to improving every aspect of MudBlazor to be your number one choice when looking for a Blazor component library. + Join us and be part of the library’s success! + + + +
+ +
+
+ +
+ @NumericExtensions.RoundedToString(3000) +
+ + Total Downloads
- - -
- @NumericExtensions.RoundedToString(1680) -
- - GitHub Stars -
+
+
+ +
+ @NumericExtensions.RoundedToString(1680) +
+ + GitHub Stars
- - -
- @NumericExtensions.RoundedToString(200) -
- - Contributors -
+
+
+ +
+ @NumericExtensions.RoundedToString(200) +
+ + Contributors
- - -
- @NumericExtensions.RoundedToString(23) -
- - Discord Members -
+
+
+ +
+ @NumericExtensions.RoundedToString(23) +
+ + Discord Members
- - - +
+
+ + + + -@code +@code { private readonly bool IsMobile = false; private readonly double _sliderValue = 50.0; @@ -291,14 +295,14 @@ private NugetPackage? _nugetPackage { get; set; } = new(); private GitHubRepository? _gitHubRepo { get; set; } = new(); - private readonly IEnumerable Elements = new List() + private readonly IEnumerable Elements = new List { - new() { Number = 1, Sign = "H", Name = "Hydrogen", Position = 0, Molar = 1.00794}, - new() { Number = 2, Sign = "He", Name = "Helium", Position = 17, Molar = 4.002602}, - new() { Number = 3, Sign = "Li", Name = "Lithium", Position = 0, Molar = 6.941}, - new() { Number = 4, Sign = "Be", Name = "Beryllium", Position = 1, Molar = 9.012182}, - new() { Number = 5, Sign = "C", Name = "Carbon", Position = 13, Molar = 12.0107}, - new() { Number = 6, Sign = "O", Name = "Oxygen", Position = 15, Molar = 15.9994}, + new() { Number = 1, Sign = "H", Name = "Hydrogen", Position = 0, Molar = 1.00794 }, + new() { Number = 2, Sign = "He", Name = "Helium", Position = 17, Molar = 4.002602 }, + new() { Number = 3, Sign = "Li", Name = "Lithium", Position = 0, Molar = 6.941 }, + new() { Number = 4, Sign = "Be", Name = "Beryllium", Position = 1, Molar = 9.012182 }, + new() { Number = 5, Sign = "C", Name = "Carbon", Position = 13, Molar = 12.0107 }, + new() { Number = 6, Sign = "O", Name = "Oxygen", Position = 15, Molar = 15.9994 } }; public class Element @@ -310,6 +314,10 @@ public string? Sign { get; set; } public double Molar { get; set; } - public override string ToString() => $"{Sign} - {Name}"; + + public override string ToString() + { + return $"{Sign} - {Name}"; + } } } \ No newline at end of file diff --git a/src/Server.UI/Pages/Documents/Components/DocumentFormDialog.razor b/src/Server.UI/Pages/Documents/Components/DocumentFormDialog.razor index b68a3b873..6a92aaa5a 100644 --- a/src/Server.UI/Pages/Documents/Components/DocumentFormDialog.razor +++ b/src/Server.UI/Pages/Documents/Components/DocumentFormDialog.razor @@ -1,5 +1,4 @@ @using CleanArchitecture.Blazor.Application.Features.Documents.Commands.AddEdit - @inherits MudComponentBase @inject IValidationService Validator @@ -31,30 +30,34 @@ + @bind-Value="Model.Description"> + + @bind-Value="Model.Content"> + - + + - + +
- +
@@ -62,18 +65,16 @@ @ConstantString.Cancel - @ConstantString.Ok + @ConstantString.Ok @code{ - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [EditorRequired][Parameter] - public AddEditDocumentCommand Model { get; set; } = default!; + [EditorRequired] [Parameter] public AddEditDocumentCommand Model { get; set; } = default!; - private MudForm? _form = default!; + private MudForm? _form; private const long MaxAllowedSize = 3145728; @@ -84,8 +85,11 @@ { MudDialog.Close(DialogResult.Ok(true)); } + } + private void Cancel() + { + MudDialog.Cancel(); } - private void Cancel() => MudDialog.Cancel(); } \ No newline at end of file diff --git a/src/Server.UI/Pages/Documents/Components/UploadFilesFormDialog.razor b/src/Server.UI/Pages/Documents/Components/UploadFilesFormDialog.razor index 7a174b8e3..d5a3a2b6e 100644 --- a/src/Server.UI/Pages/Documents/Components/UploadFilesFormDialog.razor +++ b/src/Server.UI/Pages/Documents/Components/UploadFilesFormDialog.razor @@ -1,10 +1,13 @@ +@using Color = Color +@using Severity = Severity +@using SixLabors.ImageSharp.Processing +@using SixLabors.ImageSharp +@using SixLabors.ImageSharp.Formats.Png @using CleanArchitecture.Blazor.Application.Features.Documents.Commands.AddEdit @using CleanArchitecture.Blazor.Application.Features.Documents.Commands.Upload -@using CleanArchitecture.Blazor.Server.UI.Services.JsInterop @using CleanArchitecture.Blazor.Domain.Common.Enums -@using SixLabors.ImageSharp.Processing -@using SixLabors.ImageSharp; - +@using System.Buffers +@using CleanArchitecture.Blazor.Server.UI.Services.JsInterop @inherits MudComponentBase @inject IJSRuntime Js @@ -21,13 +24,13 @@ { - @item.FileName + @item.FileName - + - (@FormatBytes(item.UploadedBytes) / @FormatBytes(item.Size)) + (@FormatBytes(item.UploadedBytes) / @FormatBytes(item.Size)) } @@ -35,34 +38,31 @@ } else { - @L["Please click [Choose Files] button to upload your photo."] + @L["Please click [Choose Files] button to upload your photo."] } - - @ConstantString.Clear - + + @ConstantString.Clear + + Icon="@Icons.Material.Filled.AttachFile" + for="@context"> @L["Choose files"] @ConstantString.Submit - + @code{ - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [EditorRequired] - [Parameter] - public AddEditDocumentCommand Model { get; set; } = default!; + [EditorRequired] [Parameter] public AddEditDocumentCommand Model { get; set; } = default!; private bool _processing; private bool _uploading; @@ -83,7 +83,7 @@ timer.Change(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); // Upload files - byte[] buffer = System.Buffers.ArrayPool.Shared.Rent(4096); + var buffer = ArrayPool.Shared.Rent(4096); try { foreach (var file in files) @@ -111,7 +111,7 @@ } finally { - System.Buffers.ArrayPool.Shared.Return(buffer); + ArrayPool.Shared.Return(buffer); // AddOrUpdate the UI with the final progress StateHasChanged(); @@ -131,10 +131,10 @@ string[] suf = { "B", "KB", "MB", "GB", "TB", "PB", "EB" }; //Longs run out around EB if (byteCount == 0) return "0" + suf[0]; - long bytes = Math.Abs(byteCount); - int place = Convert.ToInt32(Math.Floor(Math.Log(bytes, 1024))); - double num = Math.Round(bytes / Math.Pow(1024, place), 1); - return (Math.Sign(byteCount) * num).ToString() + suf[place]; + var bytes = Math.Abs(byteCount); + var place = Convert.ToInt32(Math.Floor(Math.Log(bytes, 1024))); + var num = Math.Round(bytes / Math.Pow(1024, place), 1); + return Math.Sign(byteCount) * num + suf[place]; } private async Task Submit() @@ -155,7 +155,7 @@ imgStream.Position = 0; using (var outStream = new MemoryStream()) { - using (var image = SixLabors.ImageSharp.Image.Load(imgStream)) + using (var image = Image.Load(imgStream)) { var scale = 0m; if (image.Width > 1600) @@ -170,19 +170,22 @@ { scale = 0.9m; } + image.Mutate( - i => i.AutoOrient().Resize(Convert.ToInt32(image.Width * scale), 0)); - image.Save(outStream, SixLabors.ImageSharp.Formats.Png.PngFormat.Instance); + i => i.AutoOrient().Resize(Convert.ToInt32(image.Width * scale), 0)); + image.Save(outStream, PngFormat.Instance); } + var request = new UploadRequest(uploaded.FileName, UploadType.Document, outStream.ToArray()); list.Add(request); } } catch (Exception e) { - Snackbar.Add($"{e.Message}", MudBlazor.Severity.Error); + Snackbar.Add($"{e.Message}", Severity.Error); } } + var uploadCommand = new UploadDocumentCommand(list); await Mediator.Send(uploadCommand); await Clear(); @@ -195,17 +198,21 @@ } } - private void Cancel() => MudDialog.Cancel(); + private void Cancel() + { + MudDialog.Cancel(); + } private async Task Clear() { await new InputClear(Js).Clear("fileInput"); - _uploadedFiles = new(); + _uploadedFiles = new List(); } private record FileUploadProgress(string FileName, long Size, IBrowserFile File) { public long UploadedBytes { get; set; } - public double UploadedPercentage => (double)UploadedBytes / (double)Size * 100d; + public double UploadedPercentage => UploadedBytes / (double)Size * 100d; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Documents/Documents.razor b/src/Server.UI/Pages/Documents/Documents.razor index fa9b602b6..3f121ac56 100644 --- a/src/Server.UI/Pages/Documents/Documents.razor +++ b/src/Server.UI/Pages/Documents/Documents.razor @@ -1,26 +1,23 @@ @page "/pages/documents" -@using AutoMapper; +@attribute [Authorize(Policy = Permissions.Documents.View)] +@inherits FluxorComponent +@using Severity = Severity +@using CleanArchitecture.Blazor.Application.Features.Documents.DTOs +@using CleanArchitecture.Blazor.Application.Features.Documents.Queries.GetFileStream +@using CleanArchitecture.Blazor.Application.Features.Documents.Queries.PaginationQuery +@using CleanArchitecture.Blazor.Application.Features.Documents.Specifications @using CleanArchitecture.Blazor.Domain.Common.Enums +@using BlazorDownloadFile @using CleanArchitecture.Blazor.Server.UI.Hubs @using CleanArchitecture.Blazor.Server.UI.Pages.Documents.Components -@using CleanArchitecture.Blazor.Server.UI.Services.JsInterop; -@using BlazorDownloadFile -@using CleanArchitecture.Blazor.Application.Common.Interfaces.MultiTenant -@using CleanArchitecture.Blazor.Infrastructure.Constants.Permission; -@using CleanArchitecture.Blazor.Application.Features.Documents.Caching; -@using CleanArchitecture.Blazor.Application.Features.Documents.Commands.Delete -@using CleanArchitecture.Blazor.Application.Features.Documents.DTOs +@using CleanArchitecture.Blazor.Server.UI.Services.JsInterop +@using CleanArchitecture.Blazor.Application.Features.Documents.Caching @using CleanArchitecture.Blazor.Application.Features.Documents.Commands.AddEdit -@using CleanArchitecture.Blazor.Application.Features.Documents.Queries.GetFileStream -@using CleanArchitecture.Blazor.Application.Features.Documents.Queries.PaginationQuery -@using CleanArchitecture.Blazor.Application.Features.Documents.Specifications; - -@attribute [Authorize(Policy = Permissions.Documents.View)] -@inherits FluxorComponent +@using CleanArchitecture.Blazor.Application.Features.Documents.Commands.Delete @implements IDisposable -@inject IState UserProfileState +@inject IState UserProfileState @inject IBlazorDownloadFileService BlazorDownloadFileService @inject HubClient Client @inject IMediator Mediator @@ -31,122 +28,129 @@ @Title + FixedHeader="true" + FixedFooter="false" + Virtualize="false" + @bind-RowsPerPage="_defaultPageSize" + Height="calc(100vh - 300px)" + Loading="@_loading" + MultiSelection="true" + @bind-SelectedItems="_selectedItems" + Hover="true" @ref="_table">
- +
@L["Documents"]
-
+
@ConstantString.Refresh + Size="Size.Small" + Disabled="@_loading" + OnClick="@(() => OnRefresh())" + StartIcon="@Icons.Material.Filled.Refresh" IconColor="Color.Surface" Color="Color.Primary" + Style="margin-right: 4px; margin-bottom:4px"> + @ConstantString.Refresh + @if (_canCreate) { @L["Upload Pictures"] + StartIcon="@Icons.Material.Filled.Camera" + Size="Size.Small" + Disabled="@_loading" + OnClick="OnCreate" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @L["Upload Pictures"] + } @if (_canDelete) { @ConstantString.Delete + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnDeleteChecked" + IconColor="Color.Surface"> + @ConstantString.Delete + } - @ConstantString.Refresh + @ConstantString.Refresh @if (_canCreate) { - @L["Upload Pictures"] + @L["Upload Pictures"] } @if (_canDelete) { - @ConstantString.Delete + @ConstantString.Delete }
@if (_canSearch) { - + + }
- + @if (_canEdit || _canDelete) { + Dense="true" + EndIcon="@Icons.Material.Filled.KeyboardArrowDown" IconColor="Color.Info" AnchorOrigin="Origin.CenterLeft"> @if (_canEdit) { - @ConstantString.Edit + @ConstantString.Edit } @if (_canDelete) { - @ConstantString.Delete + @ConstantString.Delete } @if (_canDownload) { - @ConstantString.Download + @ConstantString.Download } } else { + StartIcon="@Icons.Material.Filled.DoNotTouch" IconColor="Color.Secondary" Size="Size.Small" + Color="Color.Surface"> @ConstantString.NoAllowed } - +
@context.Item.Title - @context.Item.Description + @context.Item.Description
- +
@@ -167,20 +171,20 @@ }
- +
- +
- - @context.Item.DocumentType + + @context.Item.DocumentType
- + @if (UserProfile?.UserId == context.Item.Owner?.Id) { @@ -195,11 +199,11 @@ } - +
@context.Item.TenantName - @context.Item.TenantId + @context.Item.TenantId
@@ -211,7 +215,7 @@ @ConstantString.Loading - + @@ -222,18 +226,17 @@ @code { - [CascadingParameter] - protected Task AuthState { get; set; } = default!; + [CascadingParameter] protected Task AuthState { get; set; } = default!; private UserProfile UserProfile => UserProfileState.Value.UserProfile; private string? Title { get; set; } - private HashSet _selectedItems = new HashSet(); + private HashSet _selectedItems = new(); private readonly DocumentDto _currentDto = new(); private MudDataGrid _table = null!; private int _defaultPageSize = 15; private string _searchString = string.Empty; - private bool _downloading = false; + private bool _downloading; private bool _loading; private string _tenantId = string.Empty; @@ -263,7 +266,7 @@ Client.JobStartedEvent += _client_JobStarted; UserProfileState.StateChanged += StateOnStateChanged; await Client.StartAsync(); - Query = new DocumentsWithPaginationQuery() { CurrentUser = UserProfile }; + Query = new DocumentsWithPaginationQuery { CurrentUser = UserProfile }; } private void _client_JobCompleted(object? sender, string e) @@ -271,7 +274,7 @@ InvokeAsync(async () => { await _table.ReloadServerData(); - Snackbar.Add(string.Format(L["{0} recognize completed."], e), MudBlazor.Severity.Success); + Snackbar.Add(string.Format(L["{0} recognize completed."], e), Severity.Success); }); } @@ -280,14 +283,15 @@ InvokeAsync(async () => { await _table.ReloadServerData(); - Snackbar.Add(string.Format(L["{0} job started."], e), MudBlazor.Severity.Info); + Snackbar.Add(string.Format(L["{0} job started."], e), Severity.Info); }); } private void StateOnStateChanged(object? sender, EventArgs args) - { - InvokeAsync(async () => { - if(!UserProfileState.Value.IsLoading) await _table.ReloadServerData(); + { + InvokeAsync(async () => + { + if (!UserProfileState.Value.IsLoading) await _table.ReloadServerData(); }); } @@ -306,26 +310,22 @@ _loading = true; Query.Keyword = _searchString; Query.CurrentUser = UserProfile; - Query.OrderBy = state.SortDefinitions.FirstOrDefault()?.SortBy??"Id"; - Query.SortDirection = state.SortDefinitions.FirstOrDefault() == null ? SortDirection.Descending.ToString() : (state.SortDefinitions.First().Descending ? SortDirection.Descending.ToString():SortDirection.Ascending.ToString()); + Query.OrderBy = state.SortDefinitions.FirstOrDefault()?.SortBy ?? "Id"; + Query.SortDirection = state.SortDefinitions.FirstOrDefault() == null ? SortDirection.Descending.ToString() : state.SortDefinitions.First().Descending ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString(); Query.PageNumber = state.Page + 1; Query.PageSize = state.PageSize; var result = await Mediator.Send(Query); - return new GridData() { TotalItems = result.TotalItems, Items = result.Items }; + return new GridData { TotalItems = result.TotalItems, Items = result.Items }; } finally { _loading = false; } - } private void OnFilterChanged(string s) { - InvokeAsync(async () => - { - await _table.ReloadServerData(); - }); + InvokeAsync(async () => { await _table.ReloadServerData(); }); } private async Task OnChangedListView(DocumentListView listview) @@ -337,33 +337,33 @@ private async Task OnSearch(string text) { DocumentCacheKey.Refresh(); - _selectedItems = new(); + _selectedItems = new HashSet(); _searchString = text; await _table.ReloadServerData(); } private async Task OnRefresh() { - _selectedItems = new(); + _selectedItems = new HashSet(); _searchString = string.Empty; await _table.ReloadServerData(); } private async Task OnCreate() { - var command = new AddEditDocumentCommand() { DocumentType = DocumentType.Document }; + var command = new AddEditDocumentCommand { DocumentType = DocumentType.Document }; var parameters = new DialogParameters - { - { x=>x.Model,command }, - }; + { + { x => x.Model, command } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = DialogService.Show - (L["Upload Pictures"], parameters, options); + (L["Upload Pictures"], parameters, options); var state = await dialog.Result; if (!state.Canceled) { await _table.ReloadServerData(); - Snackbar.Add(ConstantString.UploadSuccess, MudBlazor.Severity.Info); + Snackbar.Add(ConstantString.UploadSuccess, Severity.Info); } } @@ -371,14 +371,14 @@ { var command = Mapper.Map(dto); var parameters = new DialogParameters - { - { nameof(DocumentFormDialog.Model),command }, - }; + { + { nameof(DocumentFormDialog.Model), command } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true }; var dialog = DialogService.Show(string.Format(ConstantString.EditTheItem, L["Document"]), parameters, options); await Task.Delay(300); - if (!string.IsNullOrEmpty(dto.URL)) await (new OpenSeadragon(JS)).Open(dto.URL); + if (!string.IsNullOrEmpty(dto.URL)) await new OpenSeadragon(JS).Open(dto.URL); var state = await dialog.Result; if (!state.Canceled) { @@ -388,12 +388,12 @@ private async Task OnDelete(DocumentDto dto) { - var command = new DeleteDocumentCommand(new int[] { dto.Id }); + var command = new DeleteDocumentCommand(new[] { dto.Id }); var parameters = new DialogParameters - { - { x=>x.Command, command }, - { x=>x.ContentText, string.Format(ConstantString.DeleteConfirmation, dto.Title) } - }; + { + { x => x.Command, command }, + { x => x.ContentText, string.Format(ConstantString.DeleteConfirmation, dto.Title) } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(string.Format(ConstantString.EditTheItem, L["Document"]), parameters, options); var state = await dialog.Result; @@ -407,13 +407,13 @@ { var command = new DeleteDocumentCommand(_selectedItems.Select(x => x.Id).ToArray()); var parameters = new DialogParameters - { - { x=>x.Command, command }, - { x=>x.ContentText, string.Format(ConstantString.DeleteConfirmWithSelected,_selectedItems.Count) } - }; + { + { x => x.Command, command }, + { x => x.ContentText, string.Format(ConstantString.DeleteConfirmWithSelected, _selectedItems.Count) } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show - (string.Format(ConstantString.DeleteTheItem, L["Document"]), parameters, options); + (string.Format(ConstantString.DeleteTheItem, L["Document"]), parameters, options); var state = await dialog.Result; if (!state.Canceled) { @@ -423,7 +423,6 @@ private async Task OnDownload(DocumentDto dto) { - try { _downloading = true; @@ -435,11 +434,12 @@ } catch (Exception e) { - Snackbar.Add($"{e.Message}", MudBlazor.Severity.Error); + Snackbar.Add($"{e.Message}", Severity.Error); } finally { _downloading = false; } } -} + +} \ No newline at end of file diff --git a/src/Server.UI/Pages/Documents/Documents.razor.js b/src/Server.UI/Pages/Documents/Documents.razor.js index 7aea3ed45..9589c16ae 100644 --- a/src/Server.UI/Pages/Documents/Documents.razor.js +++ b/src/Server.UI/Pages/Documents/Documents.razor.js @@ -12,6 +12,7 @@ }; document.head.appendChild(script); } + export function destroyscript() { var tags = document.head.getElementsByTagName('script'), index; for (index = tags.length - 1; index >= 0; index--) { diff --git a/src/Server.UI/Pages/Error.razor b/src/Server.UI/Pages/Error.razor new file mode 100644 index 000000000..599a599a2 --- /dev/null +++ b/src/Server.UI/Pages/Error.razor @@ -0,0 +1,46 @@ +@page "/Error" +@using System.Diagnostics + +Error + +

Error.

+

An error occurred while processing your request.

+ + @if (ShowRequestId) + { +

+ Request ID: @RequestId +

+ } + +

Development Mode

+

+ Swapping to Development environment will display more detailed information about the error that occurred. +

+

+ The Development environment shouldn't be enabled for deployed applications. + It can result in displaying sensitive information from exceptions to end users. + For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development + and restarting the app. +

+
+ +@code { + [CascadingParameter] private HttpContext? HttpContext { get; set; } + + private string? RequestId { get; set; } + private bool ShowRequestId => !string.IsNullOrEmpty(RequestId); + + protected override void OnInitialized() + { + RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier; + } + +} \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Authentication/Forgot.razor b/src/Server.UI/Pages/Identity/Authentication/Forgot.razor index 37e8a9525..99b9d1122 100644 --- a/src/Server.UI/Pages/Identity/Authentication/Forgot.razor +++ b/src/Server.UI/Pages/Identity/Authentication/Forgot.razor @@ -1,12 +1,11 @@ @page "/pages/authentication/forgot-password" + +@attribute [AllowAnonymous] +@using Severity = Severity @using CleanArchitecture.Blazor.Domain.Identity @using CleanArchitecture.Blazor.Application.Features.Identity.Commands.ResetPassword @using CleanArchitecture.Blazor.Server.UI.Models.Identity @using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Users.Components -@using FluentEmail.Core.Models -@using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Users - -@attribute [AllowAnonymous] @inherits OwningComponentBase @inject IStringLocalizer L @@ -24,10 +23,10 @@ { @L["Enter the email address linked to your account and you will receive an email containing a token string to reset your password."] - + @if (_sending) { - + @L["Waiting"] } else @@ -36,19 +35,20 @@ } } - else if (_step == 2 && _resetPasswordToken!=string.Empty) + else if (_step == 2 && _resetPasswordToken != string.Empty) { @L["Enter the token string from the recovery email to set your new password."] - - + + + @if (_sending) { - + @L["Waiting"] } else @@ -60,19 +60,19 @@ - @L["You are already logged in."] + @L["You are already logged in."] - @code{ +@code{ public string Title = "Forgot Password"; private int _step = 1; private string _emailAddress = string.Empty; - private bool _sending = false; - private string _resetPasswordToken = string.Empty; + private bool _sending; + private readonly string _resetPasswordToken = string.Empty; private string _inputToken = string.Empty; - private ApplicationUser? _user = null; + private readonly ApplicationUser? _user = null; private UserManager UserManager { get; set; } = null!; protected override Task OnInitializedAsync() @@ -93,12 +93,16 @@ _step = 2; Snackbar.Clear(); Snackbar.Configuration.PositionClass = Defaults.Classes.Position.TopCenter; - Snackbar.Add(string.Format(L["The email has been sent, please check the email:{0} "], _emailAddress), MudBlazor.Severity.Success, config => { config.ShowCloseIcon = false; config.HideTransitionDuration = 5000; }); + Snackbar.Add(string.Format(L["The email has been sent, please check the email:{0} "], _emailAddress), Severity.Success, config => + { + config.ShowCloseIcon = false; + config.HideTransitionDuration = 5000; + }); Logger.LogInformation("Password reset token sent to {0}.", _emailAddress); } else { - Snackbar.Add(response.ErrorMessage, MudBlazor.Severity.Error); + Snackbar.Add(response.ErrorMessage, Severity.Error); } _sending = false; @@ -113,11 +117,11 @@ { return; } - var model = new ResetPasswordFormModel() - { Id = _user.Id, DisplayName = _user.DisplayName, UserName = _user.UserName, ProfilePictureDataUrl = _user.ProfilePictureDataUrl }; + + var model = new ResetPasswordFormModel { Id = _user.Id, DisplayName = _user.DisplayName, UserName = _user.UserName, ProfilePictureDataUrl = _user.ProfilePictureDataUrl }; var parameters = new DialogParameters { - { x => x.Model, model} + { x => x.Model, model } }; var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.ExtraSmall }; var dialog = DialogService.Show(L["Set a new password"], parameters, options); @@ -129,23 +133,24 @@ { _user.IsActive = true; await UserManager.UpdateAsync(_user); - Snackbar.Add($"{L["The new password has been set successfully, please login again"]}", MudBlazor.Severity.Info); + Snackbar.Add($"{L["The new password has been set successfully, please login again"]}", Severity.Info); Logger.LogInformation("{@UserName:l} has set a new password", model.UserName); Navigation.NavigateTo("/"); } else { - Snackbar.Add($"{string.Join(",", state.Errors.Select(x => x.Description).ToArray())}", MudBlazor.Severity.Error); + Snackbar.Add($"{string.Join(",", state.Errors.Select(x => x.Description).ToArray())}", Severity.Error); } } } catch (Exception e) { - Snackbar.Add(string.Format(L["{0}, please contact the administrator"], e.Message), MudBlazor.Severity.Error); + Snackbar.Add(string.Format(L["{0}, please contact the administrator"], e.Message), Severity.Error); } finally { _sending = false; } } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Authentication/Login.razor b/src/Server.UI/Pages/Identity/Authentication/Login.razor index 08dc1e7de..c12db566e 100644 --- a/src/Server.UI/Pages/Identity/Authentication/Login.razor +++ b/src/Server.UI/Pages/Identity/Authentication/Login.razor @@ -1,19 +1,15 @@ @page "/pages/authentication/login" - -@using CleanArchitecture.Blazor.Application.Common.Interfaces.Identity; -@using CleanArchitecture.Blazor.Application.Common.Interfaces.Identity.DTOs; +@using Severity = Severity +@using CleanArchitecture.Blazor.Application.Common.Security @using CleanArchitecture.Blazor.Domain.Identity @using CleanArchitecture.Blazor.Infrastructure.Services.JWT +@using CleanArchitecture.Blazor.Application.Common.Interfaces.Identity +@using Microsoft.AspNetCore.DataProtection +@using CleanArchitecture.Blazor.Server.UI.Services @using CleanArchitecture.Blazor.Server.UI.Models.Identity @using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Users.Components -@using CleanArchitecture.Blazor.Server.UI.Services -@using Microsoft.AspNetCore.DataProtection -@using CleanArchitecture.Blazor.Application.Common.Security -@using CleanArchitecture.Blazor.Infrastructure.Constants.Role @using CleanArchitecture.Blazor.Infrastructure.Constants.User -@using Severity = MudBlazor.Severity -@using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Users -@using CleanArchitecture.Blazor.Application.Common.ExceptionHandlers +@using CleanArchitecture.Blazor.Infrastructure.Constants.Role @inherits OwningComponentBase @implements IDisposable @@ -34,23 +30,25 @@ @L["Sign In"] - @L["Don't have an account?"] @L["Sign Up"] + + @L["Don't have an account?"] @L["Sign Up"] + + @bind-Value="_model.UserName" For="@(() => _model.UserName)" + Label="@L["Username"]" + Variant="Variant.Outlined" + Required="true" + OnlyValidateIfDirty="true" + Immediate="true" + Class="my-6"> + For="@(() => _model.Password)" + Label="@L["Password"]" + PasswordMode="true" + Variant="Variant.Outlined" + Required="true">
@@ -59,15 +57,15 @@
+ Color="Color.Primary" + Size="Size.Large" + Disabled="@(_loading)" + ButtonType="ButtonType.Button" + OnClick="@(OnSubmit)" + FullWidth="true"> @if (_loading) { - + @ConstantString.Loading } else @@ -78,11 +76,11 @@
+ title="Sign in with Microsoft"> @ConstantString.Microsoft + title="Sign in with Google"> @ConstantString.Google
@@ -99,9 +97,9 @@ private MudForm? _form; private bool _success; private bool _loading; - [Inject] - public AuthenticationStateProvider AuthenticationStateProvider { get; set; } = null!; - private LoginFormModel _model = new() + [Inject] public AuthenticationStateProvider AuthenticationStateProvider { get; set; } = null!; + + private readonly LoginFormModel _model = new() { UserName = "administrator", Password = "Password123!", @@ -145,13 +143,10 @@ } else { - var accessToken = await TokenProvider.Login(user); - var claims =await TokenProvider.ParseClaimsFromJwt(accessToken); + var claims = await TokenProvider.ParseClaimsFromJwt(accessToken); ((BlazorAuthenticationStateProvider)AuthenticationStateProvider).MarkUserAsAuthenticated(claims); Logger.LogInformation("{@UserName:l} has successfully logged in", user.UserName); - - } } } @@ -168,7 +163,7 @@ var model = new ResetPasswordFormModel { Id = item.Id, DisplayName = item.DisplayName, UserName = item.UserName, ProfilePictureDataUrl = item.ProfilePictureDataUrl }; var parameters = new DialogParameters { - { x=>x.Model, model} + { x => x.Model, model } }; var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.ExtraSmall }; var dialog = DialogService.Show(L["Set new password"], parameters, options); @@ -213,25 +208,28 @@ { var admin = await UserManager.FindByNameAsync(UserName.Administrator) ?? throw new NotFoundException("Administrator's account Not Found."); user = new ApplicationUser - { - EmailConfirmed = true, - IsActive = true, - IsLive = true, - UserName = userName, - Email = userName.Any(x => x == '@') ? userName : $"{userName}@{provider}.com", - Provider = provider, - DisplayName = name, - SuperiorId = admin.Id, - TenantId = admin.TenantId, - TenantName = admin.TenantName - }; + { + EmailConfirmed = true, + IsActive = true, + IsLive = true, + UserName = userName, + Email = userName.Any(x => x == '@') ? userName : $"{userName}@{provider}.com", + Provider = provider, + DisplayName = name, + SuperiorId = admin.Id, + TenantId = admin.TenantId, + TenantName = admin.TenantName + }; var createResult = await UserManager.CreateAsync(user); if (createResult.Succeeded) { var assignResult = await UserManager.AddToRoleAsync(user, RoleName.Basic); } + await UserManager.AddLoginAsync(user, new UserLoginInfo(provider, userName, accessToken)); } + return user; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Authentication/Register.razor b/src/Server.UI/Pages/Identity/Authentication/Register.razor index 6682aa1a8..1dbfcd9e4 100644 --- a/src/Server.UI/Pages/Identity/Authentication/Register.razor +++ b/src/Server.UI/Pages/Identity/Authentication/Register.razor @@ -1,11 +1,11 @@ @page "/pages/authentication/register" +@attribute [AllowAnonymous] +@using Severity = Severity @using CleanArchitecture.Blazor.Application.Common.Security @using CleanArchitecture.Blazor.Domain.Identity -@using CleanArchitecture.Blazor.Infrastructure.Constants.Role @using FluentEmail.Core.Models - -@attribute [AllowAnonymous] +@using CleanArchitecture.Blazor.Infrastructure.Constants.Role @inherits OwningComponentBase @inject NavigationManager Navigation @@ -18,9 +18,11 @@ - + @L["Sign Up"] - @L["have an account?"] @L["Sign In"] + + @L["have an account?"] @L["Sign In"] + + Class="my-4"> + + Variant="Variant.Outlined"> + + Label="@L["Password"]" + @bind-Value="_model.Password" + For="@(() => _model.Password)" + PasswordMode="true" + Variant="Variant.Outlined" + Required="true" + RequiredError="@L["password is required!"]" + Class="mt-4"/> + Required="true" + RequiredError="@L["password is required!"]" + Class="mt-4"/> @@ -70,7 +74,7 @@ FullWidth="true"> @if (_loading) { - + @ConstantString.Loading } else @@ -82,12 +86,12 @@ - @L["You are already logged in."] + @L["You are already logged in."] @code{ - private string Title = "Sign Up"; + private readonly string Title = "Sign Up"; private MudForm? _form; private bool _loading; private readonly RegisterFormModel _model = new(); @@ -101,10 +105,10 @@ if (_form!.IsValid) { var user = new ApplicationUser - { - UserName = _model.UserName, - Email = _model.Email - }; + { + UserName = _model.UserName, + Email = _model.Email + }; var result = await UserManager.CreateAsync(user, _model.Password!); if (result.Succeeded) { @@ -114,22 +118,22 @@ var response = await SendWelcome(user.Email!, user.UserName!); if (response.Successful == false) { - Snackbar.Add(string.Format(L["{0}"], response.ErrorMessages.FirstOrDefault()), MudBlazor.Severity.Warning); + Snackbar.Add(string.Format(L["{0}"], response.ErrorMessages.FirstOrDefault()), Severity.Warning); } - Snackbar.Add(L["Register successfully!"], MudBlazor.Severity.Info); + + Snackbar.Add(L["Register successfully!"], Severity.Info); Navigation.NavigateTo("/"); } else { - Snackbar.Add($"{string.Join(",", result.Errors.Select(x => x.Description))}", MudBlazor.Severity.Error); + Snackbar.Add($"{string.Join(",", result.Errors.Select(x => x.Description))}", Severity.Error); } } else { - Snackbar.Add($"{string.Join(",", result.Errors.Select(x => x.Description))}", MudBlazor.Severity.Error); + Snackbar.Add($"{string.Join(",", result.Errors.Select(x => x.Description))}", Severity.Error); } } - } finally { @@ -141,6 +145,7 @@ { var subject = string.Format(L["Welcome to {0}"], Settings.AppName); var template = Path.Combine(Directory.GetCurrentDirectory(), "Resources", "EmailTemplates", "_welcome.txt"); - return MailService.SendAsync(toEmail, subject, "_welcome", new { AppName = Settings.AppName, Email = toEmail, UserName = userName }); + return MailService.SendAsync(toEmail, subject, "_welcome", new { Settings.AppName, Email = toEmail, UserName = userName }); } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Authentication/Reset.razor b/src/Server.UI/Pages/Identity/Authentication/Reset.razor index 688a75cf9..483dcd50a 100644 --- a/src/Server.UI/Pages/Identity/Authentication/Reset.razor +++ b/src/Server.UI/Pages/Identity/Authentication/Reset.razor @@ -1,4 +1,5 @@ @page "/pages/authentication/reset-password" +@using Severity = Severity @attribute [AllowAnonymous] @@ -7,12 +8,12 @@ @L["Set new password"] - + @L["Set new password"] - @L["You are already logged in."] + @L["You are already logged in."] @@ -38,4 +39,5 @@ _passwordInput = InputType.Text; } } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Roles/Components/PermissionsDrawer.razor b/src/Server.UI/Pages/Identity/Roles/Components/PermissionsDrawer.razor index 805fa9faf..4cfe1c3ec 100644 --- a/src/Server.UI/Pages/Identity/Roles/Components/PermissionsDrawer.razor +++ b/src/Server.UI/Pages/Identity/Roles/Components/PermissionsDrawer.razor @@ -1,5 +1,5 @@ -@using CleanArchitecture.Blazor.Server.UI.Models.Identity; - using CleanArchitecture.Blazor.Server.UI.Pages._Models.Identity +using CleanArchitecture.Blazor.Server.UI.Pages._Models.Identity +@using CleanArchitecture.Blazor.Server.UI.Models.Identity @inherits MudComponentBase @inject IStringLocalizer L @@ -70,23 +70,17 @@ @code{ - [EditorRequired][Parameter] - public List Permissions { get; set; } = new()!; + [EditorRequired] [Parameter] public List Permissions { get; set; } = new()!; - [EditorRequired][Parameter] - public bool Open { get; set; } = default!; + [EditorRequired] [Parameter] public bool Open { get; set; } = default!; - [EditorRequired][Parameter] - public EventCallback OnAssignChanged { get; set; } + [EditorRequired] [Parameter] public EventCallback OnAssignChanged { get; set; } - [EditorRequired][Parameter] - public EventCallback> OnAssignAllChanged { get; set; } + [EditorRequired] [Parameter] public EventCallback> OnAssignAllChanged { get; set; } - [EditorRequired][Parameter] - public EventCallback OnOpenChanged { get; set; } + [EditorRequired] [Parameter] public EventCallback OnOpenChanged { get; set; } - [Parameter] - public bool Waiting { get; set; } + [Parameter] public bool Waiting { get; set; } private string Keyword { get; set; } = string.Empty; @@ -98,6 +92,8 @@ t.Assigned = !t.Assigned; list.Add(t); } + await OnAssignAllChanged.InvokeAsync(list); } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Roles/Components/RoleFormDialog.razor b/src/Server.UI/Pages/Identity/Roles/Components/RoleFormDialog.razor index 590b5cee3..524673fd6 100644 --- a/src/Server.UI/Pages/Identity/Roles/Components/RoleFormDialog.razor +++ b/src/Server.UI/Pages/Identity/Roles/Components/RoleFormDialog.razor @@ -1,5 +1,4 @@ @using CleanArchitecture.Blazor.Application.Features.Identity.DTOs - @inherits MudComponentBase @inject IStringLocalizer L @@ -31,11 +30,9 @@ @code { - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [EditorRequired][Parameter] - public ApplicationRoleDto Model { get; set; } = default!; + [EditorRequired] [Parameter] public ApplicationRoleDto Model { get; set; } = default!; private MudForm? _form; private readonly RoleDtoValidator _modelValidator = new(); @@ -60,14 +57,15 @@ public RoleDtoValidator() { RuleFor(v => v.Name) - .MaximumLength(256) - .NotEmpty(); + .MaximumLength(256) + .NotEmpty(); } public Func>> ValidateValue => async (model, propertyName) => { var result = await ValidateAsync(ValidationContext.CreateWithOptions((ApplicationRoleDto)model, x => x.IncludeProperties(propertyName))); - return result.IsValid ? (IEnumerable)Array.Empty() : result.Errors.Select(e => e.ErrorMessage); + return result.IsValid ? Array.Empty() : result.Errors.Select(e => e.ErrorMessage); }; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Roles/Roles.razor b/src/Server.UI/Pages/Identity/Roles/Roles.razor index e03dc4487..c191ddec4 100644 --- a/src/Server.UI/Pages/Identity/Roles/Roles.razor +++ b/src/Server.UI/Pages/Identity/Roles/Roles.razor @@ -1,15 +1,14 @@ @page "/identity/roles" +@using Severity = Severity +@using LazyCache +@using CleanArchitecture.Blazor.Application.Features.Identity.DTOs @using CleanArchitecture.Blazor.Domain.Identity @using CleanArchitecture.Blazor.Server.UI.Models.Identity @using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Roles.Components -@using LazyCache -@using CleanArchitecture.Blazor.Application.Features.Identity.DTOs @using System.Security.Claims -@using Severity = MudBlazor.Severity -@using CleanArchitecture.Blazor.Application.Common.ExceptionHandlers -@using CleanArchitecture.Blazor.Infrastructure.Constants.ClaimTypes @using System.ComponentModel @using System.Reflection +@using CleanArchitecture.Blazor.Infrastructure.Constants.ClaimTypes @attribute [Authorize(Policy = Permissions.Roles.View)] @inherits OwningComponentBase @@ -33,56 +32,56 @@
- +
@L["Roles"]
-
+
- @ConstantString.Refresh - - @if (_canCreate) + Size="Size.Small" + OnClick="OnRefresh" + Disabled="@_loading" + StartIcon="@Icons.Material.Filled.Refresh" IconColor="Color.Surface" Color="Color.Primary" + Style="margin-right: 4px; margin-bottom:4px"> + @ConstantString.Refresh + + @if (_canCreate) { - @ConstantString.New - + StartIcon="@Icons.Material.Filled.Add" + Size="Size.Small" + OnClick="OnCreate" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.New + } @if (_canDelete) { - @ConstantString.Delete - + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + OnClick="OnDeleteChecked" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.Delete + } @if (_canExport) { - @ConstantString.Export - + StartIcon="@Icons.Material.Filled.Download" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.Export + } @if (_canImport) { @@ -97,7 +96,7 @@ for="@context"> @if (_uploading) { - + @ConstantString.Uploading } else @@ -114,11 +113,11 @@ @ConstantString.Refresh @if (_canCreate) { - @ConstantString.New + @ConstantString.New } @if (_canDelete) { - @ConstantString.Delete + @ConstantString.Delete } @@ -145,15 +144,15 @@ EndIcon="@Icons.Material.Filled.KeyboardArrowDown" IconColor="Color.Info" AnchorOrigin="Origin.CenterLeft"> @if (_canEdit) { - @ConstantString.Edit + @ConstantString.Edit } @if (_canDelete) { - @ConstantString.Delete + @ConstantString.Delete } @if (_canManagePermissions) { - @L["Set Permissions"] + @L["Set Permissions"] } } @@ -180,7 +179,7 @@ - + @@ -193,8 +192,7 @@ @code{ - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; private string? Title { get; set; } private bool _processing; @@ -304,7 +302,7 @@ { var parameters = new DialogParameters { - { x=>x.Model, item} + { x => x.Model, item } }; var options = new DialogOptions { CloseButton = true, CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = DialogService.Show(L["Edit the role"], parameters, options); @@ -356,30 +354,31 @@ var moduleName = string.Empty; var moduleDescription = string.Empty; if (module.GetCustomAttributes(typeof(DisplayNameAttribute), true) - .FirstOrDefault() is DisplayNameAttribute displayNameAttribute) + .FirstOrDefault() is DisplayNameAttribute displayNameAttribute) moduleName = displayNameAttribute.DisplayName; if (module.GetCustomAttributes(typeof(DescriptionAttribute), true) - .FirstOrDefault() is DescriptionAttribute descriptionAttribute) + .FirstOrDefault() is DescriptionAttribute descriptionAttribute) moduleDescription = descriptionAttribute.Description; var fields = module.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); allPermissions.AddRange(from field in fields - select field.GetValue(null) - into propertyValue - where propertyValue is not null - select propertyValue.ToString() - into claimValue - select new PermissionModel - { - RoleId = dto.Id, - ClaimValue = claimValue, - ClaimType = ApplicationClaimTypes.Permission, - Group = moduleName, - Description = moduleDescription, - Assigned = _assignedClaims.Any(x => x.Value == claimValue) - }); + select field.GetValue(null) + into propertyValue + where propertyValue is not null + select propertyValue.ToString() + into claimValue + select new PermissionModel + { + RoleId = dto.Id, + ClaimValue = claimValue, + ClaimType = ApplicationClaimTypes.Permission, + Group = moduleName, + Description = moduleDescription, + Assigned = _assignedClaims.Any(x => x.Value == claimValue) + }); } + return allPermissions; } @@ -409,8 +408,10 @@ { await RoleManager.RemoveClaimAsync(role, removed); } + Snackbar.Add($"{L["Permission removed successfully!"]}", Severity.Info); } + var key = $"get-claims-by-{role.Id}"; Cache.Remove(key); } @@ -445,6 +446,7 @@ } } } + Snackbar.Add($"{L["Authorization has been changed"]}", Severity.Info); await Task.Delay(300); var key = $"get-claims-by-{role.Id}"; @@ -461,7 +463,7 @@ var deleteContent = ConstantString.DeleteConfirmation; var parameters = new DialogParameters { - { x=>x.ContentText, string.Format(deleteContent, dto.Name) } + { x => x.ContentText, string.Format(deleteContent, dto.Name) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(ConstantString.DeleteConfirmationTitle, parameters, options); @@ -478,6 +480,7 @@ return; } } + Snackbar.Add($"{ConstantString.DeleteSuccess}", Severity.Info); await OnRefresh(); } @@ -488,7 +491,7 @@ var deleteContent = ConstantString.DeleteConfirmation; var parameters = new DialogParameters { - {x=> x.ContentText, string.Format(deleteContent, _selectedItems.Count) } + { x => x.ContentText, string.Format(deleteContent, _selectedItems.Count) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(ConstantString.DeleteConfirmationTitle, parameters, options); @@ -506,6 +509,7 @@ return; } } + Snackbar.Add($"{ConstantString.DeleteSuccess}", Severity.Info); await OnRefresh(); } @@ -522,4 +526,5 @@ _uploading = false; return Task.CompletedTask; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Users/Components/ResetPasswordDialog.razor b/src/Server.UI/Pages/Identity/Users/Components/ResetPasswordDialog.razor index 210bc499c..3189ced11 100644 --- a/src/Server.UI/Pages/Identity/Users/Components/ResetPasswordDialog.razor +++ b/src/Server.UI/Pages/Identity/Users/Components/ResetPasswordDialog.razor @@ -1,5 +1,5 @@ -@using CleanArchitecture.Blazor.Server.UI.Models.Identity; - using CleanArchitecture.Blazor.Server.UI.Pages._Models.Identity +using CleanArchitecture.Blazor.Server.UI.Pages._Models.Identity +@using CleanArchitecture.Blazor.Server.UI.Models.Identity @inherits MudComponentBase @inject IStringLocalizer L @@ -9,7 +9,7 @@ - + + Class="mt-4"/> + Class="mt-4"/> @@ -43,15 +43,12 @@ @code{ - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [EditorRequired] - [Parameter] - public ResetPasswordFormModel Model { get; set; } = default!; + [EditorRequired] [Parameter] public ResetPasswordFormModel Model { get; set; } = default!; - private MudForm? _form = default!; - private readonly ResetPasswordFormModelValidator _modelValidator = new ResetPasswordFormModelValidator(); + private MudForm? _form; + private readonly ResetPasswordFormModelValidator _modelValidator = new(); private async Task Submit() { @@ -62,7 +59,10 @@ } } - private void Cancel() => MudDialog.Cancel(); + private void Cancel() + { + MudDialog.Cancel(); + } // TODO: probably this will be moved as feature in the application layer public class ResetPasswordFormModelValidator : AbstractValidator @@ -70,14 +70,14 @@ public ResetPasswordFormModelValidator() { RuleFor(p => p.Password).NotEmpty().WithMessage("Your password cannot be empty") - .MinimumLength(6).WithMessage("Your password length must be at least 6.") - .MaximumLength(16).WithMessage("Your password length must not exceed 16.") - .Matches(@"[A-Z]+").WithMessage("Your password must contain at least one uppercase letter.") - .Matches(@"[a-z]+").WithMessage("Your password must contain at least one lowercase letter.") - .Matches(@"[0-9]+").WithMessage("Your password must contain at least one number.") - .Matches(@"[\@\!\?\*\.]+").WithMessage("Your password must contain at least one (@!? *.)."); + .MinimumLength(6).WithMessage("Your password length must be at least 6.") + .MaximumLength(16).WithMessage("Your password length must not exceed 16.") + .Matches(@"[A-Z]+").WithMessage("Your password must contain at least one uppercase letter.") + .Matches(@"[a-z]+").WithMessage("Your password must contain at least one lowercase letter.") + .Matches(@"[0-9]+").WithMessage("Your password must contain at least one number.") + .Matches(@"[\@\!\?\*\.]+").WithMessage("Your password must contain at least one (@!? *.)."); RuleFor(x => x.ConfirmPassword) - .Equal(x => x.Password); + .Equal(x => x.Password); } public Func>> ValidateValue => async (model, propertyName) => @@ -88,4 +88,5 @@ return result.Errors.Select(e => e.ErrorMessage); }; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Users/Components/UserForm.razor b/src/Server.UI/Pages/Identity/Users/Components/UserForm.razor index 76858992c..e322058f2 100644 --- a/src/Server.UI/Pages/Identity/Users/Components/UserForm.razor +++ b/src/Server.UI/Pages/Identity/Users/Components/UserForm.razor @@ -1,16 +1,16 @@ -@using CleanArchitecture.Blazor.Application.Common.Interfaces.MultiTenant -@using CleanArchitecture.Blazor.Application.Features.Identity.DTOs -@using CleanArchitecture.Blazor.Domain.Common.Enums -@using CleanArchitecture.Blazor.Domain.Identity @using ResizeMode = SixLabors.ImageSharp.Processing.ResizeMode -@using Severity = MudBlazor.Severity +@using Severity = Severity @using Size = SixLabors.ImageSharp.Size -@using SixLabors.ImageSharp.Formats.Png -@using SixLabors.ImageSharp.Processing @using Image = SixLabors.ImageSharp.Image -@using Color = MudBlazor.Color -@using SixLabors.ImageSharp; - using CleanArchitecture.Blazor.Domain.Identity; +@using Color = Color +@using SixLabors.ImageSharp.Processing +@using SixLabors.ImageSharp +@using SixLabors.ImageSharp.Formats.Png +@using CleanArchitecture.Blazor.Application.Features.Identity.DTOs +@using CleanArchitecture.Blazor.Domain.Common.Enums +@using CleanArchitecture.Blazor.Domain.Identity +@using CleanArchitecture.Blazor.Application.Common.Interfaces.MultiTenant +using CleanArchitecture.Blazor.Domain.Identity; @inherits MudComponentBase @@ -126,7 +126,7 @@ { var x = i; - + } @@ -135,19 +135,16 @@ @code{ + public class CheckItem { public string Key { get; set; } = string.Empty; public bool Value { get; set; } } - [EditorRequired] - [Parameter] - public ApplicationUserDto Model { get; set; } = default!; + [EditorRequired] [Parameter] public ApplicationUserDto Model { get; set; } = default!; - [EditorRequired] - [Parameter] - public EventCallback OnFormSubmit { get; set; } + [EditorRequired] [Parameter] public EventCallback OnFormSubmit { get; set; } private MudForm? _form = default!; @@ -221,30 +218,30 @@ public ApplicationUserDtoValidator() { RuleFor(v => v.TenantId) - .MaximumLength(256) - .NotEmpty(); + .MaximumLength(256) + .NotEmpty(); //RuleFor(v => v.SuperiorId) // .MaximumLength(256) // .NotEmpty().When(x=>!x.UserName.Equals("Administrator", StringComparison.CurrentCultureIgnoreCase)); RuleFor(v => v.Provider) - .MaximumLength(256) - .NotEmpty(); + .MaximumLength(256) + .NotEmpty(); RuleFor(v => v.UserName) - .MaximumLength(256) - .NotEmpty(); + .MaximumLength(256) + .NotEmpty(); RuleFor(v => v.Email) - .MaximumLength(256) - .NotEmpty() - .EmailAddress(); + .MaximumLength(256) + .NotEmpty() + .EmailAddress(); RuleFor(p => p.Password).NotEmpty().WithMessage("Your password cannot be empty") - .MinimumLength(6).WithMessage("Your password length must be at least 6.") - .MaximumLength(16).WithMessage("Your password length must not exceed 16.") - .Matches(@"[A-Z]+").WithMessage("Your password must contain at least one uppercase letter.") - .Matches(@"[a-z]+").WithMessage("Your password must contain at least one lowercase letter.") - .Matches(@"[0-9]+").WithMessage("Your password must contain at least one number.") - .Matches(@"[\!\?\*\.]+").WithMessage("Your password must contain at least one (!? *.)."); + .MinimumLength(6).WithMessage("Your password length must be at least 6.") + .MaximumLength(16).WithMessage("Your password length must not exceed 16.") + .Matches(@"[A-Z]+").WithMessage("Your password must contain at least one uppercase letter.") + .Matches(@"[a-z]+").WithMessage("Your password must contain at least one lowercase letter.") + .Matches(@"[0-9]+").WithMessage("Your password must contain at least one number.") + .Matches(@"[\!\?\*\.]+").WithMessage("Your password must contain at least one (!? *.)."); RuleFor(x => x.ConfirmPassword) - .Equal(x => x.Password); + .Equal(x => x.Password); } public Func>> ValidateValue => async (model, propertyName) => @@ -255,4 +252,5 @@ return result.Errors.Select(e => e.ErrorMessage); }; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Users/Components/UserFormDialog.razor b/src/Server.UI/Pages/Identity/Users/Components/UserFormDialog.razor index a505e99ae..6b4752705 100644 --- a/src/Server.UI/Pages/Identity/Users/Components/UserFormDialog.razor +++ b/src/Server.UI/Pages/Identity/Users/Components/UserFormDialog.razor @@ -1,13 +1,11 @@ @using CleanArchitecture.Blazor.Application.Features.Identity.DTOs -@using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Users.Components; - @inherits MudComponentBase @inject IStringLocalizer L - + @ConstantString.Cancel @@ -16,24 +14,26 @@ @code{ - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [Parameter] - public ApplicationUserDto Model { get; set; } = default!; + [Parameter] public ApplicationUserDto Model { get; set; } = default!; - private UserForm? _userForm = default!; + private UserForm? _userForm; protected async Task Submit() { await _userForm!.Submit(); } - private void Cancel() => MudDialog.Cancel(); + private void Cancel() + { + MudDialog.Cancel(); + } protected Task OnFormSubmitHandler(ApplicationUserDto model) { MudDialog.Close(DialogResult.Ok(model)); return Task.CompletedTask; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Users/Profile.razor b/src/Server.UI/Pages/Identity/Users/Profile.razor index 119a9d889..2568e4408 100644 --- a/src/Server.UI/Pages/Identity/Users/Profile.razor +++ b/src/Server.UI/Pages/Identity/Users/Profile.razor @@ -1,19 +1,22 @@ @page "/user/profile" -@using Blazor.Server.UI.Services.JsInterop; +@using Color = Color +@using ResizeMode = SixLabors.ImageSharp.Processing.ResizeMode +@using Severity = Severity +@using Size = SixLabors.ImageSharp.Size +@using SixLabors.ImageSharp.Processing +@using SixLabors.ImageSharp +@using SixLabors.ImageSharp.Formats.Png +@using CleanArchitecture.Blazor.Server.UI.Models.Identity +@using CleanArchitecture.Blazor.Server.UI.Services.JsInterop @using CleanArchitecture.Blazor.Application.Common.Interfaces.Identity -@using CleanArchitecture.Blazor.Domain.Common.Enums @using CleanArchitecture.Blazor.Domain.Identity -@using CleanArchitecture.Blazor.Server.UI.Models.Identity -@using SixLabors.ImageSharp -@using SixLabors.ImageSharp.Formats -@using SixLabors.ImageSharp.Processing - +@using CleanArchitecture.Blazor.Domain.Common.Enums @inherits OwningComponentBase @inject IValidationService Validator @inject IStringLocalizer L @inject IJSRuntime JS -@inject IState UserProfileState +@inject IState UserProfileState @inject IDispatcher Dispatcher @inject IUploadService UploadService @inject IIdentityService IdentityService @@ -25,7 +28,7 @@ @if (IsLoading && string.IsNullOrEmpty(model.UserId)) { - + } else { @@ -102,10 +105,10 @@ - + @if (_submitting) { - + @ConstantString.Waiting } else @@ -123,38 +126,38 @@ + RequiredError="@L["current password is required!"]"/> + RequiredError="@L["password is required!"]"/> + RequiredError="@L["password is required!"]"/> - + @if (_submitting) { - + @ConstantString.Waiting } else @@ -168,7 +171,8 @@
+ style="height: calc(100vh - 265px);"> +
} @@ -179,16 +183,15 @@ @code{ - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; public string Title { get; set; } = "Profile"; - private MudForm? _form = null!; - private MudForm? _passwordform = null!; + private MudForm? _form; + private MudForm? _passwordform; private bool _submitting; - private ChangePasswordModel _changepassword { get; set; } = new(); + private ChangePasswordModel _changepassword { get; } = new(); private readonly ChangePasswordModelValidator _passwordValidator = new(); private readonly List _orgData = new(); @@ -196,7 +199,10 @@ private bool IsLoading => UserProfileState.Value.IsLoading; private UserProfile model => UserProfileState.Value.UserProfile; - public void ReRender() => StateHasChanged(); + public void ReRender() + { + StateHasChanged(); + } private async void ActivePanelIndexChanged(int index) { @@ -232,7 +238,8 @@ orgitem.DirectSubordinates = count; _orgData.Add(orgitem); } - await (new OrgChart(JS)).Create(this._orgData); + + await new OrgChart(JS).Create(_orgData); } protected override async Task OnInitializedAsync() @@ -249,10 +256,7 @@ private void StateOnStateChanged(object? sender, EventArgs args) { - InvokeAsync(() => - { - StateHasChanged(); - }); + InvokeAsync(() => { StateHasChanged(); }); } private async Task UploadPhoto(IBrowserFile file) @@ -265,15 +269,15 @@ { using (var image = Image.Load(imgstream)) { - image.Mutate(i => i.Resize(new ResizeOptions() { Mode = SixLabors.ImageSharp.Processing.ResizeMode.Crop, Size = new SixLabors.ImageSharp.Size(128, 128) })); - image.Save(outStream, SixLabors.ImageSharp.Formats.Png.PngFormat.Instance); - var result = await UploadService.UploadAsync(new UploadRequest(Guid.NewGuid().ToString() + ".png", UploadType.ProfilePicture, outStream.ToArray())); + image.Mutate(i => i.Resize(new ResizeOptions { Mode = ResizeMode.Crop, Size = new Size(128, 128) })); + image.Save(outStream, PngFormat.Instance); + var result = await UploadService.UploadAsync(new UploadRequest(Guid.NewGuid() + ".png", UploadType.ProfilePicture, outStream.ToArray())); model.ProfilePictureDataUrl = result; var user = await UserManager.FindByIdAsync(model.UserId!); user!.ProfilePictureDataUrl = model.ProfilePictureDataUrl; await UserManager.UpdateAsync(user); - Snackbar.Add(L["The avatar has been updated."], MudBlazor.Severity.Info); - Dispatcher.Dispatch(new UserProfileUpdateAction() { UserProfile = model }); + Snackbar.Add(L["The avatar has been updated."], Severity.Info); + Dispatcher.Dispatch(new UserProfileUpdateAction { UserProfile = model }); } } } @@ -292,8 +296,8 @@ user.DisplayName = model.DisplayName; user.ProfilePictureDataUrl = model.ProfilePictureDataUrl; await UserManager.UpdateAsync(user); - Snackbar.Add($"{ConstantString.UpdateSuccess}", MudBlazor.Severity.Info); - Dispatcher.Dispatch(new UserProfileUpdateAction() { UserProfile = model }); + Snackbar.Add($"{ConstantString.UpdateSuccess}", Severity.Info); + Dispatcher.Dispatch(new UserProfileUpdateAction { UserProfile = model }); } } finally @@ -314,11 +318,11 @@ var result = await UserManager.ChangePasswordAsync(user!, _changepassword.CurrentPassword, _changepassword.NewPassword); if (result.Succeeded) { - Snackbar.Add($"{L["Changed password successfully."]}", MudBlazor.Severity.Info); + Snackbar.Add($"{L["Changed password successfully."]}", Severity.Info); } else { - Snackbar.Add($"{string.Join(",", result.Errors.Select(x => x.Description).ToArray())}", MudBlazor.Severity.Error); + Snackbar.Add($"{string.Join(",", result.Errors.Select(x => x.Description).ToArray())}", Severity.Error); } } } @@ -341,8 +345,7 @@ .Matches(@"[0-9]+").WithMessage("Your password must contain at least one number.") .Matches(@"[\!\?\*\.]+").WithMessage("Your password must contain at least one (!? *.)."); RuleFor(x => x.ConfirmPassword) - .Equal(x => x.NewPassword); - + .Equal(x => x.NewPassword); } public Func>> ValidateValue => async (model, propertyName) => @@ -353,4 +356,5 @@ return result.Errors.Select(e => e.ErrorMessage); }; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Users/Users.razor b/src/Server.UI/Pages/Identity/Users/Users.razor index 29fa8c8b5..1e3ded981 100644 --- a/src/Server.UI/Pages/Identity/Users/Users.razor +++ b/src/Server.UI/Pages/Identity/Users/Users.razor @@ -1,22 +1,20 @@ @page "/identity/users" +@using Severity = Severity +@using LazyCache +@using CleanArchitecture.Blazor.Application.Features.Identity.DTOs @using CleanArchitecture.Blazor.Domain.Identity @using CleanArchitecture.Blazor.Server.UI.Models.Identity @using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Roles.Components @using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Users.Components -@using LazyCache +@using System.Security.Claims @using CleanArchitecture.Blazor.Application.Common.Interfaces.Identity @using CleanArchitecture.Blazor.Application.Common.Interfaces.MultiTenant -@using CleanArchitecture.Blazor.Infrastructure.Constants.ClaimTypes -@using CleanArchitecture.Blazor.Infrastructure.Constants.Role -@using CleanArchitecture.Blazor.Application.Features.Identity.DTOs -@using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Roles @using BlazorDownloadFile -@using System.Security.Claims @using System.ComponentModel @using System.Linq.Expressions -@using Severity = MudBlazor.Severity -@using CleanArchitecture.Blazor.Application.Common.ExceptionHandlers +@using CleanArchitecture.Blazor.Infrastructure.Constants.Role @using System.Reflection +@using CleanArchitecture.Blazor.Infrastructure.Constants.ClaimTypes @attribute [Authorize(Policy = Permissions.Users.View)] @inherits OwningComponentBase @@ -49,48 +47,56 @@
- +
@L["Users"]
-
+
@ConstantString.Refresh - @if (_canCreate) + Size="Size.Small" + Disabled="@_loading" + OnClick="@(OnRefresh)" + StartIcon="@Icons.Material.Filled.Refresh" IconColor="Color.Surface" Color="Color.Primary" + Style="margin-right: 4px; margin-bottom:4px"> + @ConstantString.Refresh + + @if (_canCreate) { @ConstantString.New + StartIcon="@Icons.Material.Filled.Add" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnCreate" + IconColor="Color.Surface"> + @ConstantString.New + } @if (_canDelete) { @ConstantString.Delete + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnDeleteChecked" + IconColor="Color.Surface"> + @ConstantString.Delete + } @if (_canExport) { @ConstantString.Export + StartIcon="@Icons.Material.Filled.Download" + Size="Size.Small" + @bind-Loading="_exporting" LoadingAdornment="Adornment.Start" OnClick="OnExport" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.Export + } @if (_canImport) { @@ -105,7 +111,7 @@ for="@context"> @if (_uploading) { - + @ConstantString.Uploading } else @@ -121,21 +127,25 @@ @if (_canCreate) { @ConstantString.New + StartIcon="@Icons.Material.Filled.Add" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnCreate" + IconColor="Color.Surface"> + @ConstantString.New + } @if (_canDelete) { @ConstantString.Delete + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnDeleteChecked" + IconColor="Color.Surface"> + @ConstantString.Delete + }
@@ -149,10 +159,9 @@ } + AdornmentIcon="@Icons.Material.Filled.Search" IconSize="Size.Small"> + - - }
@@ -169,31 +178,30 @@ EndIcon="@Icons.Material.Filled.KeyboardArrowDown" IconColor="Color.Info" AnchorOrigin="Origin.CenterLeft"> @if (_canEdit) { - @ConstantString.Edit + @ConstantString.Edit } @if (_canDelete) { - @ConstantString.Delete + @ConstantString.Delete } @if (_canManagePermissions) { - @L["Set Permissions"] + @L["Set Permissions"] } @if (_canActive) { @if (context.Item.IsActive) { - OnSetActive(context.Item))>@L["Set Inactive"] + OnSetActive(context.Item))>@L["Set Inactive"] } else { - OnSetActive(context.Item))>@L["Set Active"] + OnSetActive(context.Item))>@L["Set Active"] } - } @if (_canRestPassword) { - OnResetPassword(context.Item))>@L["Reset Password"] + OnResetPassword(context.Item))>@L["Reset Password"] } } @@ -207,7 +215,7 @@ } - +
@context.Item.TenantName @@ -218,25 +226,25 @@ @L["Selected"]: @_selectedItems.Count - +
- - - @if (string.IsNullOrEmpty(context.Item.ProfilePictureDataUrl)) - { - @context.Item.UserName.First() - } - else - { - - } - - -
- @context.Item.UserName - @context.Item.Email -
+ + + @if (string.IsNullOrEmpty(context.Item.ProfilePictureDataUrl)) + { + @context.Item.UserName.First() + } + else + { + + } + + +
+ @context.Item.UserName + @context.Item.Email +
@@ -248,14 +256,14 @@
- + @context.Item.SuperiorName - + - + @if (context.Item.AssignedRoles is not null) { @@ -266,12 +274,11 @@ } - +
@if (context.Item.IsActive) { - @L["Active"] @if (context.Item.LockoutEnd is not null) { @@ -280,8 +287,6 @@
} - - } else { @@ -301,7 +306,7 @@ - + @@ -314,8 +319,7 @@ @code { - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; private int _defaultPageSize = 15; private HashSet _selectedItems = new(); @@ -364,6 +368,7 @@ _canExport = (await AuthService.AuthorizeAsync(state.User, Permissions.Users.Export)).Succeeded; _roles = await RoleManager.Roles.Select(x => x.Name).ToListAsync(); } + private bool IsOnline(string username) { return UsersStateContainer.UsersByConnectionId.Any(x => x.Value.Equals(username, StringComparison.OrdinalIgnoreCase)); @@ -375,22 +380,23 @@ { _loading = true; Expression> searchPredicate = x => - x.UserName!.ToLower().Contains(_searchString) || - x.Email!.ToLower().Contains(_searchString) || - x.DisplayName!.ToLower().Contains(_searchString) || - x.PhoneNumber!.ToLower().Contains(_searchString) || - x.TenantName!.ToLower().Contains(_searchString) || - x.Provider!.ToLower().Contains(_searchString); + x.UserName!.ToLower().Contains(_searchString) || + x.Email!.ToLower().Contains(_searchString) || + x.DisplayName!.ToLower().Contains(_searchString) || + x.PhoneNumber!.ToLower().Contains(_searchString) || + x.TenantName!.ToLower().Contains(_searchString) || + x.Provider!.ToLower().Contains(_searchString); var query = UserManager.Users.Where(searchPredicate); if (!string.IsNullOrEmpty(_searchRole)) { query = query.Where(x => x.UserRoles.Any(y => y.Role.Name == _searchRole)); } + var items = await query - .Include(x => x.UserRoles) - .Include(x => x.Superior) - .EfOrderBySortDefinitions(state) - .Skip(state.Page * state.PageSize).Take(state.PageSize).ProjectTo(Mapper.ConfigurationProvider).ToListAsync(); + .Include(x => x.UserRoles) + .Include(x => x.Superior) + .EfOrderBySortDefinitions(state) + .Skip(state.Page * state.PageSize).Take(state.PageSize).ProjectTo(Mapper.ConfigurationProvider).ToListAsync(); var total = await UserManager.Users.CountAsync(searchPredicate); return new GridData { TotalItems = total, Items = items }; } @@ -415,16 +421,18 @@ _searchRole = role; await _table.ReloadServerData(); } + private async Task OnRefresh() { await _table.ReloadServerData(); } + private async Task OnCreate() { var model = new ApplicationUserDto { Provider = "Local", Email = "", UserName = "", AssignedRoles = new[] { RoleName.Basic } }; var parameters = new DialogParameters { - { x=>x.Model,model } + { x => x.Model, model } }; var options = new DialogOptions { CloseButton = true, CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = DialogService.Show(L["Create a new user"], parameters, options); @@ -432,18 +440,18 @@ if (!result.Canceled) { var applicationUser = new ApplicationUser - { - Provider = model.Provider, - DisplayName = model.DisplayName, - UserName = model.UserName, - TenantId = model.TenantId, - TenantName = model.TenantName, - Email = model.Email, - PhoneNumber = model.PhoneNumber, - SuperiorId = model.SuperiorId, - ProfilePictureDataUrl = model.ProfilePictureDataUrl, - IsActive = model.IsActive, - }; + { + Provider = model.Provider, + DisplayName = model.DisplayName, + UserName = model.UserName, + TenantId = model.TenantId, + TenantName = model.TenantName, + Email = model.Email, + PhoneNumber = model.PhoneNumber, + SuperiorId = model.SuperiorId, + ProfilePictureDataUrl = model.ProfilePictureDataUrl, + IsActive = model.IsActive + }; var password = model.Password; var state = await UserManager.CreateAsync(applicationUser, password!); @@ -457,6 +465,7 @@ { await UserManager.AddToRoleAsync(applicationUser, RoleName.Basic); } + Snackbar.Add($"{ConstantString.CreateSuccess}", Severity.Info); await UserDataProvider.Refresh(); await OnRefresh(); @@ -470,10 +479,9 @@ private async Task OnEdit(ApplicationUserDto item) { - var parameters = new DialogParameters { - { x=>x.Model,item } + { x => x.Model, item } }; var options = new DialogOptions { CloseButton = true, CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = DialogService.Show(L["Edit the user"], parameters, options); @@ -507,6 +515,7 @@ } } } + Snackbar.Add($"{ConstantString.UpdateSuccess}", Severity.Info); await OnRefresh(); await UserDataProvider.Refresh(); @@ -523,7 +532,7 @@ var deleteContent = ConstantString.DeleteConfirmation; var parameters = new DialogParameters { - { x=>x.ContentText, string.Format(deleteContent, dto.UserName) } + { x => x.ContentText, string.Format(deleteContent, dto.UserName) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(ConstantString.DeleteConfirmationTitle, parameters, options); @@ -576,13 +585,14 @@ Snackbar.Add("You cannot delete your own account!", Severity.Error); return; } + _selectedItems.Remove(_selectedItems.First(x => x.Id == currentUserId)); } - string deleteContent = ConstantString.DeleteConfirmation; + var deleteContent = ConstantString.DeleteConfirmation; var parameters = new DialogParameters { - { x=>x.ContentText, string.Format(deleteContent, _selectedItems.Count) } + { x => x.ContentText, string.Format(deleteContent, _selectedItems.Count) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(L["Delete"], parameters, options); @@ -602,11 +612,11 @@ return; } } + Snackbar.Add($"{ConstantString.DeleteSuccess}", Severity.Info); await OnRefresh(); await UserDataProvider.Refresh(); } - } private async Task OnSetActive(ApplicationUserDto item) @@ -627,11 +637,10 @@ private async Task OnResetPassword(ApplicationUserDto item) { - var model = new ResetPasswordFormModel { Id = item.Id, DisplayName = item.DisplayName, UserName = item.UserName, ProfilePictureDataUrl = item.ProfilePictureDataUrl }; var parameters = new DialogParameters { - {x=>x.Model, model } + { x => x.Model, model } }; var options = new DialogOptions { CloseOnEscapeKey = true, CloseButton = true, MaxWidth = MaxWidth.ExtraSmall }; var dialog = DialogService.Show(L["Set Password"], parameters, options); @@ -655,10 +664,8 @@ private async Task OnSetPermissions(ApplicationUserDto item) { _showPermissionsDrawer = true; - _permissions = new(); + _permissions = new List(); _permissions = await GetAllPermissions(item); - - } private Task OnOpenChangedHandler(bool state) @@ -685,30 +692,31 @@ var moduleName = string.Empty; var moduleDescription = string.Empty; if (module.GetCustomAttributes(typeof(DisplayNameAttribute), true) - .FirstOrDefault() is DisplayNameAttribute displayNameAttribute) + .FirstOrDefault() is DisplayNameAttribute displayNameAttribute) moduleName = displayNameAttribute.DisplayName; if (module.GetCustomAttributes(typeof(DescriptionAttribute), true) - .FirstOrDefault() is DescriptionAttribute descriptionAttribute) + .FirstOrDefault() is DescriptionAttribute descriptionAttribute) moduleDescription = descriptionAttribute.Description; var fields = module.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); allPermissions.AddRange(from field in fields - select field.GetValue(null) - into propertyValue - where propertyValue is not null - select propertyValue.ToString() - into claimValue - select new PermissionModel - { - UserId = dto.Id, - ClaimValue = claimValue, - ClaimType = ApplicationClaimTypes.Permission, - Group = moduleName, - Description = moduleDescription, - Assigned = _assignedClaims.Any(x => x.Value == claimValue) - }); + select field.GetValue(null) + into propertyValue + where propertyValue is not null + select propertyValue.ToString() + into claimValue + select new PermissionModel + { + UserId = dto.Id, + ClaimValue = claimValue, + ClaimType = ApplicationClaimTypes.Permission, + Group = moduleName, + Description = moduleDescription, + Assigned = _assignedClaims.Any(x => x.Value == claimValue) + }); } + return allPermissions; } @@ -770,17 +778,17 @@ { await UserManager.RemoveClaimAsync(user, removed); } + Snackbar.Add($"{L["Permission removed successfully!"]}", Severity.Info); } + var key = $"get-claims-by-{user.Id}"; Cache.Remove(key); - } finally { _processing = false; } - } private async Task OnExport() @@ -789,13 +797,13 @@ { _exporting = true; Expression> searchPredicate = x => - (x.UserName!.Contains(_searchString) || - x.Email!.Contains(_searchString) || - x.DisplayName!.Contains(_searchString) || - x.PhoneNumber!.Contains(_searchString) || - x.TenantName!.Contains(_searchString) || - x.Provider!.Contains(_searchString)) && - (_searchRole == null || (_searchRole != null && x.UserRoles.Any(x => x.Role.Name == _searchRole))); + (x.UserName!.Contains(_searchString) || + x.Email!.Contains(_searchString) || + x.DisplayName!.Contains(_searchString) || + x.PhoneNumber!.Contains(_searchString) || + x.TenantName!.Contains(_searchString) || + x.Provider!.Contains(_searchString)) && + (_searchRole == null || (_searchRole != null && x.UserRoles.Any(x => x.Role.Name == _searchRole))); var items = await UserManager.Users.Where(searchPredicate) .Select(x => new ApplicationUserDto { @@ -805,27 +813,26 @@ Email = x.Email!, PhoneNumber = x.PhoneNumber, TenantId = x.TenantId, - TenantName = x.TenantName, + TenantName = x.TenantName }).ToListAsync(); var result = await ExcelService.ExportAsync(items, new Dictionary> { - {L["Id"],item => item.Id}, - {L["User Name"],item => item.UserName}, - {L["Display Name"],item => item.DisplayName}, - {L["Email"],item => item.Email}, - {L["Phone Number"],item => item.PhoneNumber}, - {L["Tenant Id"],item => item.TenantId}, - {L["Tenant Name"],item => item.TenantName}, + { L["Id"], item => item.Id }, + { L["User Name"], item => item.UserName }, + { L["Display Name"], item => item.DisplayName }, + { L["Email"], item => item.Email }, + { L["Phone Number"], item => item.PhoneNumber }, + { L["Tenant Id"], item => item.TenantId }, + { L["Tenant Name"], item => item.TenantName } }, L["Users"]); - var downloadResult = await BlazorDownloadFileService.DownloadFile($"{L["Users"]}.xlsx", result, contentType: "application/octet-stream"); + var downloadResult = await BlazorDownloadFileService.DownloadFile($"{L["Users"]}.xlsx", result, "application/octet-stream"); Snackbar.Add($"{ConstantString.ExportSuccess}", Severity.Info); } finally { _exporting = false; } - } private async Task OnImportData(IBrowserFile file) @@ -833,14 +840,14 @@ _uploading = true; var stream = new MemoryStream(); await file.OpenReadStream(GlobalVariable.MaxAllowedSize).CopyToAsync(stream); - var result = await ExcelService.ImportAsync(stream.ToArray(), mappers: new Dictionary> + var result = await ExcelService.ImportAsync(stream.ToArray(), new Dictionary> { { L["User Name"], (row, item) => item.UserName = row[L["User Name"]]?.ToString() }, { L["Display Name"], (row, item) => item.DisplayName = row[L["Display Name"]]?.ToString() }, { L["Email"], (row, item) => item.Email = row[L["Email"]]?.ToString() }, { L["Phone Number"], (row, item) => item.PhoneNumber = row[L["Phone Number"]]?.ToString() }, { L["Tenant Name"], (row, item) => item.TenantName = row[L["Tenant Name"]]?.ToString() }, - { L["Tenant Id"], (row, item) => item.TenantId = row[L["Tenant Id"]]?.ToString() }, + { L["Tenant Id"], (row, item) => item.TenantId = row[L["Tenant Id"]]?.ToString() } }, L["Users"]); if (result.Succeeded) @@ -873,6 +880,8 @@ Snackbar.Add($"{msg}", Severity.Error); } } + _uploading = false; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Products/Components/AdvancedSearchProducts.razor b/src/Server.UI/Pages/Products/Components/AdvancedSearchProducts.razor index 7cba1ca9b..e92eca9d3 100644 --- a/src/Server.UI/Pages/Products/Components/AdvancedSearchProducts.razor +++ b/src/Server.UI/Pages/Products/Components/AdvancedSearchProducts.razor @@ -1,5 +1,4 @@ @using CleanArchitecture.Blazor.Application.Features.Products.Queries.Pagination - @inject IStringLocalizer L - - - + + + - - + + + @@ -45,10 +46,8 @@ @code { - [EditorRequired][Parameter] - public ProductsWithPaginationQuery TRequest { get; set; } = default!; - [EditorRequired][Parameter] - public EventCallback OnConditionChanged { get; set; } + [EditorRequired] [Parameter] public ProductsWithPaginationQuery TRequest { get; set; } = default!; + [EditorRequired] [Parameter] public EventCallback OnConditionChanged { get; set; } private bool _advancedSearchExpanded; diff --git a/src/Server.UI/Pages/Products/Components/ProductFormDialog.razor b/src/Server.UI/Pages/Products/Components/ProductFormDialog.razor index 37cc8dc3c..f0d95c282 100644 --- a/src/Server.UI/Pages/Products/Components/ProductFormDialog.razor +++ b/src/Server.UI/Pages/Products/Components/ProductFormDialog.razor @@ -1,14 +1,14 @@ -@using Blazor.Server.UI.Services.JsInterop; -@using CleanArchitecture.Blazor.Application.Features.Products.Commands.AddEdit -@using CleanArchitecture.Blazor.Domain.Common.Enums @using ResizeMode = SixLabors.ImageSharp.Processing.ResizeMode -@using Severity = MudBlazor.Severity +@using Severity = Severity @using Size = SixLabors.ImageSharp.Size -@using Color = MudBlazor.Color +@using Color = Color +@using Image = SixLabors.ImageSharp.Image +@using SixLabors.ImageSharp.Processing @using SixLabors.ImageSharp @using SixLabors.ImageSharp.Formats.Png -@using SixLabors.ImageSharp.Processing -@using Image = SixLabors.ImageSharp.Image +@using CleanArchitecture.Blazor.Application.Features.Products.Commands.AddEdit +@using CleanArchitecture.Blazor.Domain.Common.Enums +@using CleanArchitecture.Blazor.Server.UI.Services.JsInterop @inherits MudComponentBase @@ -44,7 +44,7 @@ ShowProgressIndicator="true" @bind-Value="Model.Brand"> - + @@ -65,7 +65,7 @@ ShowProgressIndicator="true" @bind-Value="Model.Unit"> - + @@ -85,14 +85,14 @@
@L["The recommended size for uploading images is 640X320"] -
- @if (Model.Pictures is not null) +
+ @if (Model.Pictures is not null) { foreach (var img in Model.Pictures) {
- +
@@ -110,21 +110,17 @@ @ConstantString.Cancel - @ConstantString.SaveAndNew - @ConstantString.Save - - + @ConstantString.SaveAndNew + @ConstantString.Save + + @code { - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [EditorRequired] - [Parameter] - public AddEditProductCommand Model { get; set; } = default!; + [EditorRequired] [Parameter] public AddEditProductCommand Model { get; set; } = default!; - [Parameter] - public Action? Refresh { get; set; } + [Parameter] public Action? Refresh { get; set; } private MudForm? _form; private bool _saving; @@ -139,7 +135,7 @@ { var parameters = new DialogParameters { - { x=>x.ContentText, $"{L["Are you sure you want to erase this image?"]}" } + { x => x.ContentText, $"{L["Are you sure you want to erase this image?"]}" } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show($"{L["Erase imatge"]}", parameters, options); @@ -191,6 +187,7 @@ Snackbar.Add($"{ex.Message}", Severity.Error); } } + Snackbar.Add(L["Upload pictures successfully"], Severity.Info); if (Model.Pictures is null) @@ -262,4 +259,5 @@ { MudDialog.Cancel(); } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Products/Products.razor b/src/Server.UI/Pages/Products/Products.razor index 68b909705..0a495554d 100644 --- a/src/Server.UI/Pages/Products/Products.razor +++ b/src/Server.UI/Pages/Products/Products.razor @@ -1,18 +1,16 @@ @page "/pages/products" - +@using Severity = Severity @using CleanArchitecture.Blazor.Application.Features.Products.DTOs -@using CleanArchitecture.Blazor.Application.Features.Products.Queries @using CleanArchitecture.Blazor.Application.Features.Products.Queries.Export @using CleanArchitecture.Blazor.Application.Features.Products.Queries.Pagination +@using CleanArchitecture.Blazor.Application.Features.Products.Specifications +@using CleanArchitecture.Blazor.Domain.Common.Enums @using BlazorDownloadFile +@using CleanArchitecture.Blazor.Server.UI.Pages.Products.Components @using CleanArchitecture.Blazor.Application.Features.Products.Caching @using CleanArchitecture.Blazor.Application.Features.Products.Commands.AddEdit @using CleanArchitecture.Blazor.Application.Features.Products.Commands.Delete @using CleanArchitecture.Blazor.Application.Features.Products.Commands.Import -@using CleanArchitecture.Blazor.Application.Features.Products.Specifications -@using CleanArchitecture.Blazor.Domain.Common.Enums -@using CleanArchitecture.Blazor.Server.UI.Pages.Products.Components -@using Severity = MudBlazor.Severity @attribute [Authorize(Policy = Permissions.Products.View)] @inherits FluxorComponent @@ -20,100 +18,100 @@ @inject IJSRuntime JS @inject IStringLocalizer L @inject IMapper Mapper -@inject IState UserProfileState +@inject IState UserProfileState @inject IMediator Mediator @inject IBlazorDownloadFileService BlazorDownloadFileService @Title + FixedHeader="true" + FixedFooter="true" + Virtualize="true" + @bind-RowsPerPage="_defaultPageSize" + Height="calc(100vh - 370px)" + Loading="@_loading" + SortLabel="@ConstantString.OrderBy" + MultiSelection="true" + @bind-SelectedItems="_selectedItems" + @bind-SelectedItem="_currentDto" + Hover="true" @ref="_table">
- +
@L[_currentDto.GetClassDescription()]
-
+
+ Size="Size.Small" + Disabled="@_loading" + OnClick="@(() => OnRefresh())" + StartIcon="@Icons.Material.Filled.Refresh" IconColor="Color.Surface" Color="Color.Primary" + Style="margin-right: 4px; margin-bottom:4px"> @ConstantString.Refresh @if (_canCreate) { + StartIcon="@Icons.Material.Filled.Add" + Size="Size.Small" + Disabled="@_loading" + OnClick="OnCreate" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> @ConstantString.New + StartIcon="@Icons.Material.Filled.ContentCopy" + Size="Size.Small" + Disabled="@(_selectedItems.Count != 1)" + OnClick="OnClone" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> @ConstantString.Clone } @if (_canDelete) { + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnDeleteChecked" + IconColor="Color.Surface"> @ConstantString.Delete } @if (_canExport) { + Label="@ConstantString.Export" + Disabled="@_loading" + StartIcon="@Icons.Custom.FileFormats.FileExcel" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnExport" + IconColor="Color.Surface"> @ConstantString.Export + Label="@ConstantString.ExportPDF" + Disabled="@_loading" + StartIcon="@Icons.Material.Filled.PictureAsPdf" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnExportPDF" + IconColor="Color.Surface"> @ConstantString.ExportPDF } @@ -122,15 +120,15 @@ + Size="Size.Small" + Variant="Variant.Outlined" + Color="Color.Primary" + Disabled="@_loading" + StartIcon="@Icons.Material.Filled.Upload" + for="@context"> @if (_uploading) { - + @ConstantString.Uploading } else @@ -146,24 +144,24 @@ @if (_canCreate) { + StartIcon="@Icons.Material.Filled.Add" + Size="Size.Small" + Disabled="@_loading" + OnClick="OnCreate" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> @ConstantString.New } @if (_canDelete) { + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnDeleteChecked" + IconColor="Color.Surface"> @ConstantString.Delete } @@ -172,7 +170,7 @@ @if (_canSearch) { + AdornmentIcon="@Icons.Material.Filled.Search" IconSize="Size.Small"> } @@ -186,15 +184,15 @@ @if (_canEdit && _canDelete) { + Dense="true" + EndIcon="@Icons.Material.Filled.KeyboardArrowDown" IconColor="Color.Info" AnchorOrigin="Origin.CenterLeft"> @if (_canEdit) { - @ConstantString.Edit + @ConstantString.Edit } @if (_canDelete) { - @ConstantString.Delete + @ConstantString.Delete } } @@ -202,8 +200,8 @@ { + Icon="@Icons.Material.Filled.DoNotTouch" Size="Size.Small" + Color="Color.Surface"> } @@ -219,7 +217,7 @@
@context.Item.Name - @context.Item.Description + @context.Item.Description
@@ -228,7 +226,7 @@ @ConstantString.SelectedTotal: @_selectedItems.Sum(x => x.Price) - + @ConstantString.NoRecords @@ -237,7 +235,7 @@ @ConstantString.Loading - + @@ -255,8 +253,7 @@ @code{ - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; public string? Title { get; private set; } private HashSet _selectedItems = new(); @@ -347,8 +344,8 @@ var command = new AddEditProductCommand { Pictures = new List() }; var parameters = new DialogParameters { - { x=>x.Refresh , new Action(() => _table.ReloadServerData()) }, - { x=>x.Model, command } + { x => x.Refresh, () => _table.ReloadServerData() }, + { x => x.Model, command } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true }; var dialog = DialogService.Show @@ -362,19 +359,19 @@ { var copy = _selectedItems.First(); var command = new AddEditProductCommand - { - Brand = copy.Brand, - Description = copy.Description, - Price = copy.Price, - Unit = copy.Unit, - Name = copy.Name, - Pictures = copy.Pictures - }; + { + Brand = copy.Brand, + Description = copy.Description, + Price = copy.Price, + Unit = copy.Unit, + Name = copy.Name, + Pictures = copy.Pictures + }; var parameters = new DialogParameters { - { x=>x.Refresh , new Action(() => _table.ReloadServerData()) }, - { x=>x.Model, command } + { x => x.Refresh, () => _table.ReloadServerData() }, + { x => x.Model, command } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true }; @@ -391,8 +388,8 @@ var command = Mapper.Map(dto); var parameters = new DialogParameters { - { x=>x.Refresh , new Action(() => _table.ReloadServerData()) }, - { x=>x.Model, command } + { x => x.Refresh, () => _table.ReloadServerData() }, + { x => x.Model, command } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true }; @@ -409,8 +406,8 @@ var command = new DeleteProductCommand(new[] { dto.Id }); var parameters = new DialogParameters { - { x=>x.Command ,command }, - { x=>x.ContentText, string.Format(ConstantString.DeleteConfirmation, dto.Name) } + { x => x.Command, command }, + { x => x.ContentText, string.Format(ConstantString.DeleteConfirmation, dto.Name) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true, DisableBackdropClick = true }; @@ -428,8 +425,8 @@ var command = new DeleteProductCommand(_selectedItems.Select(x => x.Id).ToArray()); var parameters = new DialogParameters { - { x=>x.Command, command }, - { x=>x.ContentText, string.Format(ConstantString.DeleteConfirmWithSelected, _selectedItems.Count) } + { x => x.Command, command }, + { x => x.ContentText, string.Format(ConstantString.DeleteConfirmWithSelected, _selectedItems.Count) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show @@ -447,18 +444,18 @@ { _exporting = true; var request = new ExportProductsQuery - { - Brand = Query.Brand, - Name = Query.Name, - MinPrice = Query.MinPrice, - MaxPrice = Query.MaxPrice, - Unit = Query.Unit, - Keyword = Query.Keyword, - ListView = Query.ListView, - OrderBy = _table.SortDefinitions.Values.FirstOrDefault()?.SortBy ?? "Id", - SortDirection = _table.SortDefinitions.Values.FirstOrDefault()?.Descending ?? false ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString(), - ExportType = ExportType.Excel - }; + { + Brand = Query.Brand, + Name = Query.Name, + MinPrice = Query.MinPrice, + MaxPrice = Query.MaxPrice, + Unit = Query.Unit, + Keyword = Query.Keyword, + ListView = Query.ListView, + OrderBy = _table.SortDefinitions.Values.FirstOrDefault()?.SortBy ?? "Id", + SortDirection = _table.SortDefinitions.Values.FirstOrDefault()?.Descending ?? false ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString(), + ExportType = ExportType.Excel + }; var result = await Mediator.Send(request); if (result.Succeeded) { @@ -469,6 +466,7 @@ { Snackbar.Add($"{result.ErrorMessage}", Severity.Error); } + _exporting = false; } @@ -476,18 +474,18 @@ { _pdfExporting = true; var request = new ExportProductsQuery - { - Brand = Query.Brand, - Name = Query.Name, - MinPrice = Query.MinPrice, - MaxPrice = Query.MaxPrice, - Unit = Query.Unit, - Keyword = Query.Keyword, - ListView = Query.ListView, - OrderBy = _table.SortDefinitions.Values.FirstOrDefault()?.SortBy ?? "Id", - SortDirection = _table.SortDefinitions.Values.FirstOrDefault()?.Descending ?? false ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString(), - ExportType = ExportType.PDF - }; + { + Brand = Query.Brand, + Name = Query.Name, + MinPrice = Query.MinPrice, + MaxPrice = Query.MaxPrice, + Unit = Query.Unit, + Keyword = Query.Keyword, + ListView = Query.ListView, + OrderBy = _table.SortDefinitions.Values.FirstOrDefault()?.SortBy ?? "Id", + SortDirection = _table.SortDefinitions.Values.FirstOrDefault()?.Descending ?? false ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString(), + ExportType = ExportType.PDF + }; var result = await Mediator.Send(request); if (result.Succeeded) { @@ -498,6 +496,7 @@ { Snackbar.Add($"{result.ErrorMessage}", Severity.Error); } + _pdfExporting = false; } @@ -521,6 +520,8 @@ Snackbar.Add($"{msg}", Severity.Error); } } + _uploading = false; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/SystemManagement/AuditTrails.razor b/src/Server.UI/Pages/SystemManagement/AuditTrails.razor index 09d41be30..227e5baaa 100644 --- a/src/Server.UI/Pages/SystemManagement/AuditTrails.razor +++ b/src/Server.UI/Pages/SystemManagement/AuditTrails.razor @@ -1,15 +1,13 @@ @page "/system/audittrails" @using CleanArchitecture.Blazor.Application.Features.AuditTrails.DTOs @using CleanArchitecture.Blazor.Application.Features.AuditTrails.Queries.PaginationQuery +@using CleanArchitecture.Blazor.Application.Features.AuditTrails.Specifications @using CleanArchitecture.Blazor.Application.Features.AuditTrails.Caching -@using CleanArchitecture.Blazor.Application.Features.AuditTrails.Specifications; - - @inherits FluxorComponent @attribute [Authorize(Policy = Permissions.AuditTrails.View)] @inject IStringLocalizer L -@inject IState UserProfileState +@inject IState UserProfileState @inject IMediator Mediator @L[Title] @@ -26,71 +24,76 @@
- +
@L[Title]
-
+
@ConstantString.Refresh -
- - - - - - - -
-
- - - - - -
- @context.Item.Owner?.UserName - @context.Item.UserId -
-
-
- - - - - - - - -
- - - - - @context.Item.TableName - - - - - - - @L["Field Name"] - @L[_currentDto.GetMemberDescription(x=>x.OldValues)] - @L[_currentDto.GetMemberDescription(x=>x.NewValues)] - - - - @foreach (var field in ((context.Item.NewValues?.Any() ?? false) ? context.Item.NewValues : (context.Item.OldValues?.Any() ?? false) ? context.Item.OldValues : new Dictionary())) + Size="Size.Small" + OnClick="@(() => OnRefresh())" + StartIcon="@Icons.Material.Filled.Refresh" IconColor="Color.Surface" Color="Color.Primary" + Style="margin-right: 5px;"> + @ConstantString.Refresh + +
+ + + + + + + + +
+
+ + + + + +
+ @context.Item.Owner?.UserName + @context.Item.UserId +
+
+
+ + + + + + + + +
+ + + + + + @context.Item.TableName + + + + + + + + @L["Field Name"] + @L[_currentDto.GetMemberDescription(x => x.OldValues)] + @L[_currentDto.GetMemberDescription(x => x.NewValues)] + + + + @foreach (var field in context.Item.NewValues?.Any() ?? false ? context.Item.NewValues : context.Item.OldValues?.Any() ?? false ? context.Item.OldValues : new Dictionary()) { @field.Key @@ -110,7 +113,7 @@ @ConstantString.Loading - + @@ -122,8 +125,7 @@ @code { - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; public string Title { get; private set; } = "Audit Trails"; private MudDataGrid _table = null!; @@ -132,7 +134,7 @@ private readonly AuditTrailDto _currentDto = new(); - private AuditTrailsWithPaginationQuery Query { get; set; } = new(); + private AuditTrailsWithPaginationQuery Query { get; } = new(); private UserProfile UserProfile => UserProfileState.Value.UserProfile; protected override async Task OnInitializedAsync() @@ -153,7 +155,7 @@ Query.PageSize = state.PageSize; var result = await Mediator.Send(Query).ConfigureAwait(false); - return new GridData() { TotalItems = result.TotalItems, Items = result.Items }; + return new GridData { TotalItems = result.TotalItems, Items = result.Items }; } finally { diff --git a/src/Server.UI/Pages/SystemManagement/Components/CreatePicklistDialog.razor b/src/Server.UI/Pages/SystemManagement/Components/CreatePicklistDialog.razor index 28854e83e..9286481f5 100644 --- a/src/Server.UI/Pages/SystemManagement/Components/CreatePicklistDialog.razor +++ b/src/Server.UI/Pages/SystemManagement/Components/CreatePicklistDialog.razor @@ -1,3 +1,4 @@ +@using Severity = Severity @using CleanArchitecture.Blazor.Application.Features.KeyValues.Commands.AddEdit @inherits MudComponentBase @@ -10,26 +11,26 @@ - - - - @@ -41,22 +42,19 @@ @ConstantString.Cancel - @ConstantString.Save + @ConstantString.Save @code { - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [EditorRequired] - [Parameter] - public AddEditKeyValueCommand Model { get; set; } = default!; + [EditorRequired] [Parameter] public AddEditKeyValueCommand Model { get; set; } = default!; - private MudForm? _form = default!; - private bool _saving = false; + private MudForm? _form; + private bool _saving; private async Task Submit() { @@ -71,11 +69,11 @@ if (result.Succeeded) { MudDialog.Close(DialogResult.Ok(true)); - Snackbar.Add(ConstantString.SaveSuccess, MudBlazor.Severity.Info); + Snackbar.Add(ConstantString.SaveSuccess, Severity.Info); } else { - Snackbar.Add(result.ErrorMessage, MudBlazor.Severity.Error); + Snackbar.Add(result.ErrorMessage, Severity.Error); } } finally @@ -84,5 +82,8 @@ } } - private void Cancel() => MudDialog.Cancel(); + private void Cancel() + { + MudDialog.Cancel(); + } } \ No newline at end of file diff --git a/src/Server.UI/Pages/SystemManagement/Components/LogsLineCharts.razor b/src/Server.UI/Pages/SystemManagement/Components/LogsLineCharts.razor index 1e30e8668..b8f9c5ef6 100644 --- a/src/Server.UI/Pages/SystemManagement/Components/LogsLineCharts.razor +++ b/src/Server.UI/Pages/SystemManagement/Components/LogsLineCharts.razor @@ -1,9 +1,6 @@ @using CleanArchitecture.Blazor.Application.Features.Loggers.DTOs -@using ApexCharts @using CleanArchitecture.Blazor.Application.Features.Loggers.Queries.ChatData -@using CleanArchitecture.Blazor.Server.UI.Services -@using CleanArchitecture.Blazor.Server.UI.Services.Layout - +@using ApexCharts @implements IDisposable @inject LayoutService LayoutService @@ -12,25 +9,24 @@
+ SeriesType="SeriesType.Bar"/>
@code - { +{ public List Data { get; set; } = new(); - [Inject] - private IMediator Mediator { get; set; } = default!; + [Inject] private IMediator Mediator { get; set; } = default!; private ApexChart Chart { get; set; } = null!; private ApexChartOptions Options { get; set; } = new(); @@ -39,28 +35,27 @@ protected override async Task OnInitializedAsync() { var isDarkMode = LayoutService.IsDarkMode; - var colors = isDarkMode ? new List() { "#0277BD", "#039BE5" } : new List() { "#1976D2", "#90CAF9" }; + var colors = isDarkMode ? new List { "#0277BD", "#039BE5" } : new List { "#1976D2", "#90CAF9" }; _backgroundColor = isDarkMode ? "background:rgb(66, 66, 66)" : "background:#fff"; - Options.Theme = new ApexCharts.Theme() - { - Mode = isDarkMode ? Mode.Dark : Mode.Light, - }; + Options.Theme = new Theme + { + Mode = isDarkMode ? Mode.Dark : Mode.Light + }; Options.Fill = new Fill + { + Type = new List { FillType.Gradient }, + Gradient = new FillGradient { - Type = new List { FillType.Gradient }, - Gradient = new FillGradient - { - Type = GradientType.Vertical, - ShadeIntensity = 1, - OpacityFrom = 1, - OpacityTo = 0.7, - GradientToColors = colors, - Stops = new List() { 0, 100 } - }, - - }; + Type = GradientType.Vertical, + ShadeIntensity = 1, + OpacityFrom = 1, + OpacityTo = 0.7, + GradientToColors = colors, + Stops = new List { 0, 100 } + } + }; Options.Yaxis = new List(); Options.Yaxis.Add(new YAxis { @@ -71,30 +66,30 @@ } ); Options.Xaxis = new XAxis + { + Labels = new XAxisLabels { - Labels = new XAxisLabels - { - Formatter = @"function (value) { + Formatter = @"function (value) { if (value === undefined) {return '';} return '';}" - } - }; + } + }; Options.DataLabels = new DataLabels - { - Formatter = @"function(value, opts) { + { + Formatter = @"function(value, opts) { return Number(value).toLocaleString();}" - }; + }; - Options.Tooltip = new ApexCharts.Tooltip + Options.Tooltip = new Tooltip + { + X = new TooltipX { - X = new TooltipX - { - Formatter = @"function(value, opts) { + Formatter = @"function(value, opts) { if (value === undefined) {return '';} return value}" - } - }; + } + }; LayoutService.MajorUpdateOccured += LayoutServiceOnMajorUpdateOccured; @@ -104,7 +99,7 @@ private async void LayoutServiceOnMajorUpdateOccured(object? sender, EventArgs e) { var isDarkMode = LayoutService.IsDarkMode; - var colors = isDarkMode ? new List() { "#0277BD", "#039BE5" } : new List() { "#1976D2", "#90CAF9" }; + var colors = isDarkMode ? new List { "#0277BD", "#039BE5" } : new List { "#1976D2", "#90CAF9" }; _backgroundColor = isDarkMode ? "background:rgb(66, 66, 66)" : "background:#fff"; Options.Theme.Mode = isDarkMode ? Mode.Dark : Mode.Light; Options.Fill.Gradient.GradientToColors = colors; @@ -113,7 +108,6 @@ StateHasChanged(); } - public void Dispose() { diff --git a/src/Server.UI/Pages/SystemManagement/Dictionaries.razor b/src/Server.UI/Pages/SystemManagement/Dictionaries.razor index 552c9ffd5..99fd6ed94 100644 --- a/src/Server.UI/Pages/SystemManagement/Dictionaries.razor +++ b/src/Server.UI/Pages/SystemManagement/Dictionaries.razor @@ -1,9 +1,9 @@ @page "/system/picklist" +@using Severity = Severity @using CleanArchitecture.Blazor.Application.Features.KeyValues.DTOs @using CleanArchitecture.Blazor.Application.Features.KeyValues.Queries.Export @using CleanArchitecture.Blazor.Application.Features.KeyValues.Queries.PaginationQuery @using BlazorDownloadFile -@using CleanArchitecture.Blazor.Infrastructure.Constants.Permission @using CleanArchitecture.Blazor.Application.Features.KeyValues.Caching @using CleanArchitecture.Blazor.Application.Features.KeyValues.Commands.AddEdit @using CleanArchitecture.Blazor.Application.Features.KeyValues.Commands.Delete @@ -36,54 +36,60 @@
- +
@Title
-
+
@ConstantString.Refresh - @if (_canCreate) + Size="Size.Small" + OnClick="OnRefresh" + Disabled="@_loading" + StartIcon="@Icons.Material.Filled.Refresh" IconColor="Color.Surface" Color="Color.Primary" + Style="margin-right: 4px; margin-bottom:4px"> + @ConstantString.Refresh + + @if (_canCreate) { @ConstantString.New + StartIcon="@Icons.Material.Filled.Add" + Size="Size.Small" + OnClick="OnCreate" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.New + } @if (_canDelete) { @ConstantString.Delete + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + OnClick="OnDeleteChecked" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.Delete + } @if (_canImport) { - @if (_uploading) + StartIcon="@Icons.Material.Filled.Upload" + Size="Size.Small" + Style="margin-right:4px; margin-bottom:4px" + for="importdataInput" + HtmlTag="label" + IconColor="Color.Surface"> + @if (_uploading) { - + @ConstantString.Uploading } else @@ -92,19 +98,19 @@ } -
@if (_canSearch) { - - + + + } @@ -149,26 +160,26 @@
- + - - - + + + - + - + - + @@ -179,18 +190,17 @@ @code { - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; private MudDataGrid _table = null!; public string Title { get; set; } = "Picklist"; private IList _keyValueList = new List(); - private HashSet _selectedItems = new HashSet(); + private HashSet _selectedItems = new(); private KeyValueDto SelectedItem { get; set; } = new(); private KeyValueDto ElementBeforeEdit { get; set; } = new(); private string _searchString = string.Empty; - private Picklist? _searchPicklist = null; + private Picklist? _searchPicklist; private int _defaultPageSize = 15; private KeyValuesWithPaginationQuery Query { get; set; } = new(); @@ -215,7 +225,6 @@ _canDelete = (await AuthService.AuthorizeAsync(state.User, Permissions.Dictionaries.Delete)).Succeeded; _canImport = (await AuthService.AuthorizeAsync(state.User, Permissions.Dictionaries.Import)).Succeeded; _canExport = (await AuthService.AuthorizeAsync(state.User, Permissions.Dictionaries.Export)).Succeeded; - } private async Task> ServerReload(GridState state) @@ -223,17 +232,17 @@ try { _loading = true; - var request = new KeyValuesWithPaginationQuery() - { - Keyword = _searchString, - Picklist = _searchPicklist, - OrderBy = state.SortDefinitions.FirstOrDefault()?.SortBy ?? "Id", - SortDirection = state.SortDefinitions.FirstOrDefault()?.Descending ?? true ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString(), - PageNumber = state.Page + 1, - PageSize = state.PageSize - }; + var request = new KeyValuesWithPaginationQuery + { + Keyword = _searchString, + Picklist = _searchPicklist, + OrderBy = state.SortDefinitions.FirstOrDefault()?.SortBy ?? "Id", + SortDirection = state.SortDefinitions.FirstOrDefault()?.Descending ?? true ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString(), + PageNumber = state.Page + 1, + PageSize = state.PageSize + }; var result = await Mediator.Send(request).ConfigureAwait(false); - return new GridData() { TotalItems = result.TotalItems, Items = result.Items }; + return new GridData { TotalItems = result.TotalItems, Items = result.Items }; } finally { @@ -263,25 +272,26 @@ private void CommittedItemChanges(KeyValueDto item) { InvokeAsync(async () => - { - var command = Mapper.Map(item); - var result = await Mediator.Send(command); - if (!result.Succeeded) - { - Snackbar.Add($"{result.ErrorMessage}", MudBlazor.Severity.Error); - } - StateHasChanged(); - }); + { + var command = Mapper.Map(item); + var result = await Mediator.Send(command); + if (!result.Succeeded) + { + Snackbar.Add($"{result.ErrorMessage}", Severity.Error); + } + + StateHasChanged(); + }); } private async Task DeleteItem(KeyValueDto item) { var deleteContent = ConstantString.DeleteConfirmation; - var command = new DeleteKeyValueCommand(new int[] { item.Id }); + var command = new DeleteKeyValueCommand(new[] { item.Id }); var parameters = new DialogParameters { - { x=>x.Command, command }, - { x=>x.ContentText, string.Format(deleteContent,item.Name) } + { x => x.Command, command }, + { x => x.ContentText, string.Format(deleteContent, item.Name) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(ConstantString.DeleteConfirmationTitle, parameters, options); @@ -291,12 +301,13 @@ await _table.ReloadServerData(); } } + private async Task OnDeleteChecked() { var deleteContent = ConstantString.DeleteConfirmation; var parameters = new DialogParameters { - { x=>x.ContentText, string.Format(deleteContent,_selectedItems.Count) } + { x => x.ContentText, string.Format(deleteContent, _selectedItems.Count) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(ConstantString.DeleteConfirmationTitle, parameters, options); @@ -306,43 +317,42 @@ var command = new DeleteKeyValueCommand(_selectedItems.Select(x => x.Id).ToArray()); var result = await Mediator.Send(command); await _table.ReloadServerData(); - Snackbar.Add($"{ConstantString.DeleteSuccess}", MudBlazor.Severity.Info); + Snackbar.Add($"{ConstantString.DeleteSuccess}", Severity.Info); } } + private async Task OnCreate() { - var command = new AddEditKeyValueCommand() - { - Name = SelectedItem.Name, - Description = SelectedItem?.Description, - }; + var command = new AddEditKeyValueCommand + { + Name = SelectedItem.Name, + Description = SelectedItem?.Description + }; var parameters = new DialogParameters { - { x=>x.Model,command }, + { x => x.Model, command } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = DialogService.Show - (L["Create a new picklist"], parameters, options); + (L["Create a new picklist"], parameters, options); var state = await dialog.Result; if (!state.Canceled) { await _table.ReloadServerData(); } - } private async Task OnExport() { _downloading = true; - var request = new ExportKeyValuesQuery() - { - Keyword = _searchString, - }; + var request = new ExportKeyValuesQuery + { + Keyword = _searchString + }; var result = await Mediator.Send(request); - var downloadResult = await BlazorDownloadFileService.DownloadFile($"{L["Picklist"]}.xlsx", result, contentType: "application/octet-stream"); - Snackbar.Add($"{ConstantString.ExportSuccess}", MudBlazor.Severity.Info); + var downloadResult = await BlazorDownloadFileService.DownloadFile($"{L["Picklist"]}.xlsx", result, "application/octet-stream"); + Snackbar.Add($"{ConstantString.ExportSuccess}", Severity.Info); _downloading = false; - } private async Task OnImportData(InputFileChangeEventArgs e) @@ -355,15 +365,17 @@ if (result.Succeeded) { await OnRefresh(); - Snackbar.Add($"{ConstantString.ImportSuccess}", MudBlazor.Severity.Info); + Snackbar.Add($"{ConstantString.ImportSuccess}", Severity.Info); } else { foreach (var msg in result.Errors) { - Snackbar.Add($"{msg}", MudBlazor.Severity.Error); + Snackbar.Add($"{msg}", Severity.Error); } } + _uploading = false; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/SystemManagement/Logs.razor b/src/Server.UI/Pages/SystemManagement/Logs.razor index e6766b0c7..e0e53ffc9 100644 --- a/src/Server.UI/Pages/SystemManagement/Logs.razor +++ b/src/Server.UI/Pages/SystemManagement/Logs.razor @@ -1,13 +1,10 @@ @page "/system/logs" -@using CleanArchitecture.Blazor.Server.UI.Pages.SystemManagement.Components +@using Severity = Severity @using CleanArchitecture.Blazor.Application.Features.Loggers.DTOs -@using CleanArchitecture.Blazor.Application.Features.Loggers.Queries.ChatData -@using CleanArchitecture.Blazor.Infrastructure.Constants.User -@using CleanArchitecture.Blazor.Application.Features.Loggers.Commands.Clear @using CleanArchitecture.Blazor.Application.Features.Loggers.Queries.PaginationQuery -@using CleanArchitecture.Blazor.Application.Features.Loggers.Specifications; -@using FluentEmail.Core -@using Severity = MudBlazor.Severity +@using CleanArchitecture.Blazor.Application.Features.Loggers.Specifications +@using CleanArchitecture.Blazor.Server.UI.Pages.SystemManagement.Components +@using CleanArchitecture.Blazor.Application.Features.Loggers.Commands.Clear @attribute [Authorize(Policy = Permissions.Logs.View)] @inject IStringLocalizer L @@ -16,15 +13,15 @@ + ServerData="@(ServerReload)" + FixedHeader="true" + FixedFooter="false" + Virtualize="true" + RowsPerPage="@_defaultPageSize" + Height="calc(100vh - 360px)" + Style="min-height:700px" + Loading="@_loading" + Hover="true" @ref="_table">
@@ -40,21 +37,21 @@
+ Size="Size.Small" + Disabled="@_loading" + OnClick="@(OnRefresh)" + StartIcon="@Icons.Material.Filled.Refresh" IconColor="Color.Surface" Color="Color.Primary" + Style="margin-right: 5px;"> @ConstantString.Refresh @if (_canPurge) { + Size="Size.Small" + Disabled="@(_loading || _clearing)" + OnClick="@(OnPurge)" + StartIcon="@Icons.Material.Filled.ClearAll" IconColor="Color.Surface" Color="Color.Secondary" + Style="margin-right: 5px;"> @if (_clearing) { @@ -71,7 +68,7 @@ + AdornmentIcon="@Icons.Material.Filled.Search" IconSize="Size.Medium"> @@ -147,25 +144,23 @@ - + -@code - { - [CascadingParameter] - private Task AuthState { get; set; } = default!; +@code +{ + [CascadingParameter] private Task AuthState { get; set; } = default!; - [Inject] - private IMediator Mediator { get; set; } = default!; + [Inject] private IMediator Mediator { get; set; } = default!; private string Title { get; set; } = "Logs"; private string _searchString = string.Empty; private MudDataGrid _table = default!; private readonly LogDto _currentDto = new(); - private int _defaultPageSize = 15; + private readonly int _defaultPageSize = 15; private bool _loading; @@ -180,9 +175,7 @@ var state = await AuthState; _canPurge = (await AuthService.AuthorizeAsync(state.User, Permissions.Logs.Purge)).Succeeded; } - - private async Task> ServerReload(GridState state) { @@ -231,7 +224,7 @@ { var parameters = new DialogParameters { - { x=>x.ContentText, $"{L["Are you sure you want to erase all the logs?"]}" } + { x => x.ContentText, $"{L["Are you sure you want to erase all the logs?"]}" } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show diff --git a/src/Server.UI/Pages/Tenants/TenantFormDialog.razor b/src/Server.UI/Pages/Tenants/TenantFormDialog.razor index 59b3cd322..d0138aad1 100644 --- a/src/Server.UI/Pages/Tenants/TenantFormDialog.razor +++ b/src/Server.UI/Pages/Tenants/TenantFormDialog.razor @@ -1,5 +1,5 @@ +@using Severity = Severity @using CleanArchitecture.Blazor.Application.Features.Tenants.Commands.AddEdit - @inherits MudComponentBase @inject IValidationService Validator @@ -11,7 +11,7 @@ - - - @@ -36,20 +36,17 @@ @ConstantString.Cancel - @ConstantString.Save + @ConstantString.Save @code { - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [EditorRequired] - [Parameter] - public AddEditTenantCommand Model { get; set; } = default!; + [EditorRequired] [Parameter] public AddEditTenantCommand Model { get; set; } = default!; - private MudForm? _form = default!; - private bool _saving = false; + private MudForm? _form; + private bool _saving; private async Task Submit() { @@ -65,11 +62,11 @@ if (result.Succeeded) { MudDialog.Close(DialogResult.Ok(true)); - Snackbar.Add(ConstantString.SaveSuccess, MudBlazor.Severity.Info); + Snackbar.Add(ConstantString.SaveSuccess, Severity.Info); } else { - Snackbar.Add(result.ErrorMessage, MudBlazor.Severity.Error); + Snackbar.Add(result.ErrorMessage, Severity.Error); } } finally @@ -78,5 +75,9 @@ } } - private void Cancel() => MudDialog.Cancel(); + private void Cancel() + { + MudDialog.Cancel(); + } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Tenants/Tenants.razor b/src/Server.UI/Pages/Tenants/Tenants.razor index 6d4c78df3..059e8f9a5 100644 --- a/src/Server.UI/Pages/Tenants/Tenants.razor +++ b/src/Server.UI/Pages/Tenants/Tenants.razor @@ -4,7 +4,6 @@ @using CleanArchitecture.Blazor.Application.Features.Tenants.Caching @using CleanArchitecture.Blazor.Application.Features.Tenants.Commands.AddEdit @using CleanArchitecture.Blazor.Application.Features.Tenants.Commands.Delete -@using CleanArchitecture.Blazor.Infrastructure.Constants.Permission @attribute [Authorize(Policy = Permissions.Tenants.View)] @@ -28,53 +27,59 @@
- +
@Title
-
+
@ConstantString.Refresh - @if (_canCreate) + Size="Size.Small" + Disabled="@_loading" + OnClick="@(() => OnRefresh())" + StartIcon="@Icons.Material.Filled.Refresh" IconColor="Color.Surface" Color="Color.Primary" + Style="margin-right: 4px; margin-bottom:4px"> + @ConstantString.Refresh + + @if (_canCreate) { @ConstantString.New + StartIcon="@Icons.Material.Filled.Add" + Disabled="@_loading" + Size="Size.Small" + OnClick="OnCreate" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.New + } @if (_canDelete) { @ConstantString.Delete + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnDeleteChecked" + IconColor="Color.Surface"> + @ConstantString.Delete + } - @ConstantString.Refresh + @ConstantString.Refresh @if (_canCreate) { - @ConstantString.New + @ConstantString.New } @if (_canDelete) { - @ConstantString.Delete + @ConstantString.Delete } @@ -82,15 +87,16 @@
@if (_canSearch) { - + + }
- + @if (_canEdit || _canDelete) @@ -100,11 +106,11 @@ EndIcon="@Icons.Material.Filled.KeyboardArrowDown" IconColor="Color.Info" AnchorOrigin="Origin.CenterLeft"> @if (_canEdit) { - @ConstantString.Edit + @ConstantString.Edit } @if (_canDelete) { - @ConstantString.Delete + @ConstantString.Delete } } @@ -118,12 +124,12 @@ } - + - @L["Selected"]: @(this._selectedItems.Count) + @L["Selected"]: @_selectedItems.Count - +
@context.Item.Name @@ -135,7 +141,7 @@ - + @@ -147,12 +153,11 @@ @code { - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; public string? Title { get; private set; } private int _defaultPageSize = 15; - private HashSet _selectedItems = new HashSet(); + private HashSet _selectedItems = new(); private MudDataGrid _table = default!; private TenantDto _currentDto = new(); private string _searchString = string.Empty; @@ -162,7 +167,7 @@ private bool _canEdit; private bool _canDelete; - private TenantsWithPaginationQuery Query { get; set; } = new(); + private TenantsWithPaginationQuery Query { get; } = new(); protected override async Task OnInitializedAsync() { @@ -185,7 +190,7 @@ Query.PageNumber = state.Page + 1; Query.PageSize = state.PageSize; var result = await Mediator.Send(Query); - return new GridData() { TotalItems = result.TotalItems, Items = result.Items }; + return new GridData { TotalItems = result.TotalItems, Items = result.Items }; } finally { @@ -195,7 +200,7 @@ private async Task OnSearch(string text) { - _selectedItems = new(); + _selectedItems = new HashSet(); _searchString = text; await _table.ReloadServerData(); } @@ -203,7 +208,7 @@ private async Task OnRefresh() { TenantCacheKey.Refresh(); - _selectedItems = new(); + _selectedItems = new HashSet(); _searchString = string.Empty; await _table.ReloadServerData(); } @@ -213,11 +218,11 @@ var command = new AddEditTenantCommand(); var parameters = new DialogParameters { - { x=>x.Model,command }, + { x => x.Model, command } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = DialogService.Show - (L["Create a new Tenant"], parameters, options); + (L["Create a new Tenant"], parameters, options); var state = await dialog.Result; if (!state.Canceled) { @@ -230,11 +235,11 @@ var command = Mapper.Map(dto); var parameters = new DialogParameters { - { x=>x.Model,command }, + { x => x.Model, command } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = DialogService.Show - (L["Edit the Tenant"], parameters, options); + (L["Edit the Tenant"], parameters, options); var state = await dialog.Result; if (!state.Canceled) { @@ -245,11 +250,11 @@ private async Task OnDelete(TenantDto dto) { var deleteContent = ConstantString.DeleteConfirmationWithId; - var command = new DeleteTenantCommand(new string[] { dto.Id }); + var command = new DeleteTenantCommand(new[] { dto.Id }); var parameters = new DialogParameters { - { x=>x.Command, command }, - { x=>x.ContentText, string.Format(deleteContent, dto.Id) } + { x => x.Command, command }, + { x => x.ContentText, string.Format(deleteContent, dto.Id) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(L["Delete the Tenant"], parameters, options); @@ -266,8 +271,8 @@ var deleteContent = ConstantString.DeleteConfirmation; var parameters = new DialogParameters { - { x=>x.Command, command }, - { x=>x.ContentText, string.Format(deleteContent,_selectedItems.Count) } + { x => x.Command, command }, + { x => x.ContentText, string.Format(deleteContent, _selectedItems.Count) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(L["Delete Selected Tenants"], parameters, options); diff --git a/src/Server.UI/Program.cs b/src/Server.UI/Program.cs index 6ea7a6b72..0f64be110 100644 --- a/src/Server.UI/Program.cs +++ b/src/Server.UI/Program.cs @@ -21,7 +21,6 @@ app.ConfigureServer(builder.Configuration); if (app.Environment.IsDevelopment()) -{ // Initialise and seed database using (var scope = app.Services.CreateScope()) { @@ -30,10 +29,7 @@ await initializer.SeedAsync(); var notificationService = scope.ServiceProvider.GetService(); if (notificationService is InMemoryNotificationService inMemoryNotificationService) - { inMemoryNotificationService.Preload(); - } } -} await app.RunAsync(); \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.ar-iq.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.ar-iq.resx index 734036577..c7ead01e9 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.ar-iq.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.ar-iq.resx @@ -1,144 +1,150 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + اليابانية - + الإنكليزية - + الفرنسية - + الألمانية - + خميرية - + الروسية - + الصينية المبسطة - + الإسبانية \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.ca-ES.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.ca-ES.resx index 5dfb9b5df..a6bca8262 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.ca-ES.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.ca-ES.resx @@ -1,144 +1,150 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Inglés - + Japonés - + Francés - + Alemany - + Jemer - + Rús - + Chinés simplificat - + Espanyol \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.de-DE.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.de-DE.resx index 38983d297..0cb3a6960 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.de-DE.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.de-DE.resx @@ -1,144 +1,150 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Englisch - + Japanisch - + Französisch - + Deutsch - + Khmer - + Russisch - + Vereinfachtes Chinesisch - + Spanisch \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.en.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.en.resx index 606d3f76f..faac2e492 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.en.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.en.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + English - + French - + German - + Japanese - + Khmer - + Russian - + Simplified Chinese - + Spanish \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.es-ES.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.es-ES.resx index 611e8b831..69e8fff8c 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.es-ES.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.es-ES.resx @@ -1,144 +1,150 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Inglés - + Japonés - + Francés - + Alemán - + Jemer - + Ruso - + Chino simplificado - + Español \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.fr-FR.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.fr-FR.resx index cfe4f33ae..f12d20351 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.fr-FR.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.fr-FR.resx @@ -1,144 +1,150 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Anglais - + Japonais - + Français - + Allemand - + Khmer - + Russe - + Chinois simplifié - + Espagnol \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.ja-JP.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.ja-JP.resx index 906c21461..6db15795d 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.ja-JP.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.ja-JP.resx @@ -1,144 +1,150 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 英語 - + 日本語 - + フランス語 - + ドイツ語 - + クメール語 - + ロシア語 - + 中国語(簡体字 - + スペイン語 \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.km-KH.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.km-KH.resx index 33d7ecd71..27b10f33a 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.km-KH.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.km-KH.resx @@ -1,144 +1,150 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 영어 - + 일본어 - + 프랑스 국민 - + 독일 사람 - + 크메르어 - + 러시아인 - + 중국어 간체 - + 스페인의 \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.resx index 5408b29c0..cc799f3c3 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.resx @@ -1,144 +1,150 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Japanese - + English - + French - + German - + Khmer - + Russian - + Simplified Chinese - + Spanish \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.ru.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.ru.resx index 20be99b0c..fa993fcda 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.ru.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.ru.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Английский - + Французский - + Немецкий - + Японский - + Кхмерский - + Русский - + Упрощенный китайский - + Испанский \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.zh-CN.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.zh-CN.resx index 0b91f8efe..ddb4379c9 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.zh-CN.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.zh-CN.resx @@ -1,144 +1,150 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 英語 - + 日语 - + 法语 - + 德语 - + 韩语 - + 俄语 - + 简体中文 - + 西班牙语 \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.ar-IQ.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.ar-IQ.resx index e1002440e..bbb32048d 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.ar-IQ.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.ar-IQ.resx @@ -1,186 +1,192 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + تحليلات - + تطبيق - + مسارات التدقيق - + إذن - + المصرفيه - + لوحة تحكم بلازور - + حجز - + القواميس - + التجارة الإلكترونية - + وطن - + وظائف - + سجل - + إدارة - + قائمة الانتقاء - + منتجات - + ملف تعريف - + ادوار - + نظام - + المستعملون - + الزبائن - + الوثائق - + متعدد المستأجرين \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.ca-ES.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.ca-ES.resx index 3e92d40b1..bb9f679b4 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.ca-ES.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.ca-ES.resx @@ -1,186 +1,192 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Anàlisi - + Aplicació - + Registres d'auditoria - + Autorizació - + Banca - + Taulell de control de Blazor - + Reservar - + Clients - + Diccionaris - + Documents - + Comerç electrònic - + Inici - + Treballs - + Registre - + GESTIÓ - + Multi-arrendatari - + Llista de selecció - + Productes - + Perfil - + Rols - + Sistema - + Usuaris \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.de-DE.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.de-DE.resx index 1c77ae16f..6ed77c709 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.de-DE.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.de-DE.resx @@ -1,186 +1,192 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Analytik - + Anwendung - + Audit-Pfade - + Autorisierung - + Bankwesen - + Blazor Dashboard - + Buchung - + Kunden - + Wörterbücher - + Dokumente - + E-Commerce - + Startseite - + Stellenangebote - + Anmelden - + VERWALTUNG - + Mehrmandant - + Auswahlliste - + Produkte - + Steckbrief - + Rollen - + System - + Benutzer \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.en.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.en.resx index 36caa7241..a46543225 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.en.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.en.resx @@ -1,186 +1,192 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Analytics - + Application - + Audit Trails - + Authorization - + Banking - + Blazor Dashboard - + Booking - + Customers - + Dictionaries - + Documents - + E-Commerce - + Home - + Jobs - + Log - + MANAGEMENT - + Multi-Tenant - + Picklist - + Products - + Profile - + Roles - + System - + Users \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.es-ES.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.es-ES.resx index be7dac24a..9558bd332 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.es-ES.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.es-ES.resx @@ -1,186 +1,192 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Análisis - + Aplicación - + Registros de auditoría - + Autorización - + Banca - + Panel de control de Blazor - + Reservar - + Clientes - + Diccionarios - + Documentos - + Comercio electrónico - + Inicio - + Puestos de trabajo - + Registro - + GESTIÓN - + Multi-arrendatario - + Lista de selección - + Productos - + Perfil - + Roles - + Sistema - + Usuarios \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.fr-FR.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.fr-FR.resx index 96231089f..c1de1efe1 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.fr-FR.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.fr-FR.resx @@ -1,186 +1,192 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Analytique - + Application - + Pistes d'audit - + Autorisation - + Banque - + Tableau de bord Blazor - + Réservation - + Clients - + Dictionnaires - + Documents - + Commerce électronique - + Accueil - + Emplois - + Connectez-vous à - + GESTION - + Multi-locataire - + Liste de sélection - + Produits - + Profil - + Rôles - + Système - + Utilisateurs \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.ja-JP.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.ja-JP.resx index b928a5f70..9d9718478 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.ja-JP.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.ja-JP.resx @@ -1,186 +1,192 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + アナリティクス - + アプリケーション - + 監査証跡 - + 認証方法 - + バンキング - + Blazorダッシュボード - + 予約 - + お客様 - + ディクショナリー - + ドキュメント - + Eコマース - + ホーム - + 仕事内容 - + ログ - + 管理 - + マルチテナント - + ピックリスト - + 製品情報 - + プロフィール - + 役割 - + システム - + ユーザー名 \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.km-KH.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.km-KH.resx index afb371fc5..7cd6b0177 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.km-KH.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.km-KH.resx @@ -1,186 +1,192 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 해석학 - + 신청 - + 감사 추적 - + 권한 부여 - + 은행업 - + 블레이저 대시보드 - + 예약 - + 고객 - + 사전 - + 서류 - + 전자상거래 - + - + 채용정보 - + 통나무 - + 관리 - + 멀티 테넌트 - + 선택 목록 - + 제품 - + 프로필 - + 역할 - + 체계 - + 사용자 \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.resx index 3d6bb3319..dea6e5ea0 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.resx @@ -1,186 +1,192 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Analytics - + Application - + Audit Trails - + Authorization - + Banking - + Blazor Dashboard - + Booking - + Dictionaries - + E-Commerce - + Home - + Jobs - + Log - + MANAGEMENT - + Picklist - + Products - + Profile - + Roles - + System - + Users - + Customers - + Documents - + Multi-Tenant \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.ru.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.ru.resx index a644bcacf..3b461f644 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.ru.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.ru.resx @@ -1,186 +1,192 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Аналитика - + Приложение - + Следы аудита - + Авторизация - + Банковское дело - + Приборная панель Blazor - + Бронирование - + Клиенты - + Словари - + Документы - + Электронная коммерция - + Главная - + Работа - + Войти - + УПРАВЛЕНИЕ - + Многопользовательский - + Пиклист - + Продукты - + Профиль - + Роли - + Система - + Пользователи \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.zh-CN.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.zh-CN.resx index fa80a5d38..ae2c3172c 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.zh-CN.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.zh-CN.resx @@ -1,186 +1,192 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 分析决策 - + 应用程序 - + 安全审计 - + 授权 - + 金融 - + Blazor看板 - + 预定 - + 客户信息 - + 参数选用表 - + 文档 - + 电子商务 - + 首页 - + 任务 - + 日志 - + 系统管理 - + 多租户 - + 参数选用表 - + 产品库 - + 简档 - + 角色 - + 系统 - + 系统账号 \ No newline at end of file diff --git a/src/Server.UI/Resources/EmailTemplates/_recoverypassword.cshtml b/src/Server.UI/Resources/EmailTemplates/_recoverypassword.cshtml index 0cf28253e..bee7ca081 100644 --- a/src/Server.UI/Resources/EmailTemplates/_recoverypassword.cshtml +++ b/src/Server.UI/Resources/EmailTemplates/_recoverypassword.cshtml @@ -1,7 +1,9 @@ -

@Model.AppName received a request to use email as a recovery email for the account @Model.Email.

-

Use this token string to finish resting password:

-
-

@Model.Token

-
-

This token string will expire in 1 hours.

-

If you don't recognize @Model.Email, you can safely ignore this email.

\ No newline at end of file +

@Model.AppName received a request to use email as a recovery email for the account @Model.Email.

+

Use this token string to finish resting password:

+
+

+ @Model.Token +

+
+

This token string will expire in 1 hours.

+

If you don't recognize @Model.Email, you can safely ignore this email.

\ No newline at end of file diff --git a/src/Server.UI/Resources/EmailTemplates/_welcome.cshtml b/src/Server.UI/Resources/EmailTemplates/_welcome.cshtml index 21a21e54b..22b9f19fc 100644 --- a/src/Server.UI/Resources/EmailTemplates/_welcome.cshtml +++ b/src/Server.UI/Resources/EmailTemplates/_welcome.cshtml @@ -1,7 +1,7 @@ -

Hi @Model.UserName,

-

Thank you for signing up for @Model.AppName. We are here to help you get the most out of your trial to show how you and your team can develop smarter and faster.

-
-

Log in and pick one of the walk-throughs to learn how.

-
-

if you have any question at any time, give us a call at 0800(Freephone). We're here to support you.

-

Welcome to @Model.AppName.

\ No newline at end of file +

Hi @Model.UserName,

+

Thank you for signing up for @Model.AppName. We are here to help you get the most out of your trial to show how you and your team can develop smarter and faster.

+
+

Log in and pick one of the walk-throughs to learn how.

+
+

if you have any question at any time, give us a call at 0800(Freephone). We're here to support you.

+

Welcome to @Model.AppName.

\ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.ar-IQ.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.ar-IQ.resx index 5f2b09ac6..42cbbe710 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.ar-IQ.resx @@ -1,163 +1,173 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + البريد الالكترونى - + أدخل عنوان البريد الإلكتروني المرتبط بحسابك وستتلقى رسالة بريد إلكتروني تحتوي على رابط لإعادة تعيين كلمة المرور الخاصة بك. - + أدخل سلسلة الرمز المميز من البريد الإلكتروني المخصص للطوارئ لتعيين كلمة المرور الجديدة. - + هل نسيت كلمة المرور؟ - + إعادة تعيين كلمة المرور - + تعيين كلمة مرور جديدة - + تعيين كلمة مرور جديدة - + يجب أن تكون سلسلة الرمز المميز للإدخال مساوية لسلسلة الرمز المميز في البريد الإلكتروني للاسترداد - + تم تعيين كلمة المرور الجديدة بنجاح، يرجى تسجيل الدخول مرة أخرى - + سلسلة الرمز المميز - + انتظار - + لقد قمت بتسجيل الدخول بالفعل. - + تلقى {0} طلبا لاستخدام البريد الإلكتروني كبريد إلكتروني مخصص للطوارئ {1} الحساب. استخدم هذا الرمز المميز:[ {2} ] لإنهاء كلمة المرور المريحة. - + {0}، يرجى الاتصال بالمسؤول - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.ca-ES.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.ca-ES.resx index 1488d9e19..cfdb6357c 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.ca-ES.resx @@ -1,166 +1,178 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Introdueïxi la direcció de correu electrònic vinculada al teu compte i rebras un correu electrònic amb un enllaç per a restablir la contrasenya. - + ¿Ha oblidat la seva contrasenya? - + Restablir contrasenya - + {0} ha rebut una sol·licitud per a utilitzar el correu electrònic com a correu de recuperació per la compta {1}. Utilitzi aquest token:[ {2} ] per a finalitzar de recuperar la contrasenya. - + {0}, per favor, possis en contacte amb l'administrador - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler - + Correu electrònic - + Introdueïxi la direcció de correu electrònic vinculada al seu compte i rebrà un correu ectrònic amb una clau per a restablir la contrasenya. - + Introdueïxi la clau del correu electrònico de recuperació per a establir la nova contrasenya. - + Establir una nova contrasenya - + Establir una nova contrasenya - + La clau d'entrada ha de ser igual a la clau del correu electrònico de recuperació - + La nova contrasenya s'ha establert amb èxit, per favor, inicia sessió de nou - + Clau - + Esperant - + Ja ha iniciat la sessió. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.de-DE.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.de-DE.resx index edf02d489..786079b39 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.de-DE.resx @@ -1,166 +1,178 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Geben Sie die mit Ihrem Konto verknüpfte E-Mail-Adresse ein und Sie erhalten eine E-Mail mit einem Link zum Zurücksetzen Ihres Passworts. - + Passwort vergessen? - + Passwort zurücksetzen - + {0} hat eine Anfrage erhalten, E-Mail als Wiederherstellungs-E-Mail für das Konto {1} zu verwenden. Verwenden Sie dieses Token:[ {2} ], um die Wiederherstellung des Passworts abzuschließen. - + {0}, bitte kontaktieren Sie den Administrator - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler - + E-Mail - + Geben Sie die mit Ihrem Konto verknüpfte E-Mail-Adresse ein. Sie erhalten dann eine E-Mail mit einer Token-Zeichenfolge, mit der Sie Ihr Passwort zurücksetzen können. - + Geben Sie den Token-String aus der Wiederherstellungs-E-Mail ein, um Ihr neues Passwort festzulegen. - + Ein neues Passwort festlegen - + Neues Passwort festlegen - + Der eingegebene Token-String muss mit dem Token-String in der Wiederherstellungs-E-Mail übereinstimmen - + Das neue Passwort wurde erfolgreich gesetzt, bitte melden Sie sich erneut an - + Token Zeichenfolge - + Warten auf - + Sie sind bereits eingeloggt. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.en.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.en.resx index 7be3e01ec..03876fe30 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.en.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.en.resx @@ -1,166 +1,178 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Enter the email address linked to your account and you will receive an email containing a link to reset your password. - + Forgot Password? - + Reset Password - + {0} received a request to use email as a recovery email for the account {1}. Use this token:[ {2} ] to finish resting password. - + {0}, please contact the administrator - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler - + E-mail - + Enter the email address linked to your account and you will receive an email containing a token string to reset your password. - + Enter the token string from the recovery email to set your new password. - + Set a new password - + Set New Password - + The input token string must be equal to the token string in the recovery email - + The new password has been set successfully, please login again - + Token String - + Waiting - + You are already logged in. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.es-ES.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.es-ES.resx index 292ae9dd2..1501b49b2 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.es-ES.resx @@ -1,166 +1,178 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Introduce la dirección de correo electrónico vinculada a tu cuenta y recibirás un correo electrónico con un enlace para restablecer tu contraseña. - + ¿Ha olvidado su contraseña? - + Restablecer contraseña - + {0} ha recibido una solicitud para utilizar el correo electrónico como correo de recuperación para la cuenta {1}. Utilice este token:[ {2} ] para terminar de recuperar la contraseña. - + {0}, por favor, póngase en contacto con el administrador - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler - + Correo electrónico - + Introduzca la dirección de correo electrónico vinculada a su cuenta y recibirá un correo electrónico con una cadena de tokens para restablecer su contraseña. - + Introduzca la cadena de claves del correo electrónico de recuperación para establecer su nueva contraseña. - + Establezca una nueva contraseña - + Establecer una nueva contraseña - + La cadena del token de entrada debe ser igual a la cadena del token en el correo electrónico de recuperación - + La nueva contraseña se ha establecido con éxito, por favor, inicie sesión de nuevo - + Cadena de tokens - + Esperando - + Ya ha iniciado la sesión. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.fr-FR.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.fr-FR.resx index 06c598618..58c185af8 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.fr-FR.resx @@ -1,166 +1,178 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Entrez l'adresse e-mail liée à votre compte et vous recevrez un e-mail contenant un lien pour réinitialiser votre mot de passe. - + Vous avez oublié votre mot de passe ? - + Réinitialiser le mot de passe - + {0} a reçu une demande d'utilisation de l'email comme email de récupération pour le compte {1}. Utilisez ce jeton :[ {2} ] pour finir de restaurer le mot de passe. - + {0}, veuillez contacter l'administrateur - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler - + E-mail - + Entrez l'adresse e-mail liée à votre compte et vous recevrez un e-mail contenant une chaîne de caractères pour réinitialiser votre mot de passe. - + Saisissez la chaîne de caractères du courriel de récupération pour définir votre nouveau mot de passe. - + Définir un nouveau mot de passe - + Définir un nouveau mot de passe - + La chaîne du jeton d'entrée doit être égale à la chaîne du jeton dans l'e-mail de récupération. - + Le nouveau mot de passe a été défini avec succès, veuillez vous connecter à nouveau. - + Chaîne du jeton - + En attente de - + Vous êtes déjà connecté. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.ja-JP.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.ja-JP.resx index 440e459ec..f097e97f1 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.ja-JP.resx @@ -1,166 +1,178 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + パスワードをリセットするためのリンクを含む電子メールが送信されます。 - + パスワードを忘れた場合 - + パスワードのリセット - + {0} は、アカウント {1} の回復用メールとして電子メールを使用する要求を受け取りました。このトークン:[ {2} ]を使用して、パスワードの復元を完了してください。 - + {0}, 管理者に連絡してください。 - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler - + 電子メール - + パスワードをリセットするためのトークン文字列を含むメールを受信します。 - + パスワード再設定用メールに記載されているトークン文字列を入力し、新しいパスワードを設定してください。 - + 新しいパスワードの設定 - + 新しいパスワードの設定 - + 入力されたトークン文字列は、リカバリメールに記載されたトークン文字列と同じである必要があります - + 新しいパスワードが設定されました。 - + トークン文字列 - + 待機中 - + すでにログインしています。 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.km-KH.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.km-KH.resx index 7465d3bc0..abf6e3fcd 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.km-KH.resx @@ -1,166 +1,178 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 계정에 연결된 이메일 주소를 입력하면 비밀번호 재설정 링크가 포함된 이메일을 받게 됩니다. - + 비밀번호를 잊으 셨나요? - + 암호를 재설정 - + 이메일 - + បញ្ចូល អាសយដ្ឋាន អ៊ីមែល ដែល ភ្ជាប់ ទៅ គណនី របស់ អ្នក ហើយ អ្នក នឹង ទទួល អ៊ីមែល ដែល មាន ខ្សែ អក្សរ ថូខេន ដើម្បី កំណត់ ពាក្យ សម្ងាត់ របស់ អ្នក ឡើង វិញ & # 160; ។ - + បញ្ចូល ខ្សែអក្សរ token ពី អ៊ីមែល recovery ដើម្បី កំណត់ ពាក្យ សម្ងាត់ ថ្មី របស់ អ្នក ។ - + កំណត់ពាក្យសម្ងាត់ថ្មី - + កំណត់ពាក្យសម្ងាត់ថ្មី - + ខ្សែអក្សរ token input ត្រូវតែស្មើទៅនឹង string token នៅក្នុង អ៊ីមែល recovery - + ពាក្យ សម្ងាត់ ថ្មី ត្រូវ បាន កំណត់ ដោយ ជោគជ័យ សូម ចូល ម្តង ទៀត - + ខ្សែអក្សរ Token - + រង់ចាំ - + អ្នក បាន ចូល រួច ហើយ ។ - + {0} បាន ទទួល សំណើ មួយ ដើម្បី ប្រើ អ៊ីមែល ជា អ៊ីមែល ស្តារ ឡើង វិញ សម្រាប់ គណនី {1} ។ ប្រើ token នេះ:[ {2} ] ដើម្បី បញ្ចប់ ការ សម្រាក ពាក្យ សម្ងាត់ ។ - + {0} សូមទាក់ទងទៅអ្នកគ្រប់គ្រង - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.resx index 6f94624cd..378c91266 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.resx @@ -1,164 +1,174 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + E-mail - + Enter the email address linked to your account and you will receive an email containing a link to reset your password. - - + + Enter the token string from the recovery email to set your new password. - + Forgot Password? - + Reset Password - + Set a new password - + Set New Password - + The input token string must be equal to the token string in the recovery email - + The new password has been set successfully, please login again - + Token String - + Waiting - + You are already logged in. - + {0} received a request to use email as a recovery email for the account {1}. Use this token:[ {2} ] to finish resting password. - + {0}, please contact an administrator - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.ru.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.ru.resx index 0b7097024..5ac9e964e 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.ru.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.ru.resx @@ -1,166 +1,178 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Введите адрес электронной почты, привязанный к вашей учетной записи, и вы получите письмо со ссылкой для сброса пароля. - + Забыли пароль? - + Сброс пароля - + {0} получил запрос на использование электронной почты в качестве почты восстановления для учетной записи {1}. Используйте этот токен:[ {2} ] для завершения восстановления пароля. - + {0}, пожалуйста, свяжитесь с администратором - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler - + Электронная почта - + Введите адрес электронной почты, привязанный к вашей учетной записи, и вы получите письмо, содержащее маркерную строку для сброса пароля. - + Введите маркерную строку из письма для восстановления, чтобы установить новый пароль. - + Установить новый пароль - + Установить новый пароль - + Вводимая строка маркера должна быть равна строке маркера в письме о восстановлении пароля - + Новый пароль был установлен успешно, пожалуйста, войдите в систему снова - + Строка маркера - + Ожидание - + Вы уже вошли в систему. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.zh-CN.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.zh-CN.resx index 1de1ac210..9ca57963a 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.zh-CN.resx @@ -1,166 +1,178 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 输入与您的账户相连的电子邮件地址,您将收到一封包含重置密码链接的电子邮件。 - + 忘记密码? - + 重置密码 - + {0}收到了一个使用电子邮件作为帐户{1}的恢复电子邮件的请求。使用此令牌:[ {2} ] 完成恢复密码。 - + {0},请联系管理员 - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler - + 电子邮件 - + 输入与您的账户相关联的电子邮件地址,您将收到一封包含令牌字符串的电子邮件来重置您的密码。 - + 输入恢复邮件中的令牌字符串来设置你的新密码。 - + 设置一个新的密码 - + 设置新密码 - + 输入的令牌字符串必须与恢复邮件中的令牌字符串相等 - + 新密码已经设置成功,请再次登录 - + 代币字符串 - + 正在等待 - + 你已经登录了。 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.ar-IQ.resx b/src/Server.UI/Resources/Pages/Authentication/Login.ar-IQ.resx index 1d31789f3..a367bf48e 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.ar-IQ.resx @@ -1,180 +1,190 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + ليس لديك حساب؟ - + هل نسيت كلمة المرور؟ - + شعار - + كلمة المرور مطلوبة! - + يجب ألا يقل طول كلمة المرور عن 6 - + يجب أن تحتوي كلمة المرور على حرف كبير واحد على الأقل - + يجب أن تحتوي كلمة المرور على رقم واحد على الأقل - + يجب أن تحتوي كلمة المرور على حرف صغير واحد على الأقل - + يرجى التحقق من اسم المستخدم وكلمة المرور. إذا كنت لا تزال غير قادر على تسجيل الدخول، فاتصل بالمسؤول. - + تذكرني؟ - + تسجيل الدخول - + التسجيل - + اسم المستخدم - + اسم المستخدم مطلوب! - + لم يتم العثور على مستخدم ، أو لا يوجد ترخيص ، يرجى الاتصال بالمسؤول. - + اسم المستخدم مطلوب! - + يرجى التحقق من اسم المستخدم وكلمة المرور الخاصة بك. إذا كنت لا تزال غير قادر على تسجيل الدخول ، فاتصل بالمسؤول. - + لم يتم العثور على مستخدم ، أو لا يوجد ترخيص ، يرجى الاتصال بالمسؤول. - + اسم المستخدم - + يرجى التحقق من اسم المستخدم وكلمة المرور الخاصة بك. إذا كنت لا تزال غير قادر على تسجيل الدخول ، فاتصل بالمسؤول. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.ca-ES.resx b/src/Server.UI/Resources/Pages/Authentication/Login.ca-ES.resx index eb576c896..6528dced9 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.ca-ES.resx @@ -1,180 +1,190 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + No tens un compte? - + Ha oblidat la contrasenya? - + Contrasenya - + Es requereix contrasenya! - + La contrasenya ha de tenir una longitud mínima de 6 - + La contrasenya ha de tenir al menys una lletra majúscula - + La contrasenya ha de tenir al meny un dígit numèric - + La contrasenya ha de tenir al menys una lletra minúscula - + Comproveu el vostre nom d'usuari i contrasenya. Si encara no podeu iniciar sessió, poseu-vos en contacte amb el vostre administrador. - + Recordar? - + Iniciar sessió - + Registrar-se - + Nom d'usuari - + El nom d'usuari és obligatori! - + No s'ha trobat cap usuari o no hi ha autorització, contacti amb l'administrador.administrador. - + El nom d'usuari és obligatori! - + Comproveu el vostre nom d'usuari i contrasenya. Si encara no podeu iniciar sessió, poseu-vos en contacte amb el vostre administrador. - + No s'ha trobat cap usuari o no hi ha autorització, poseu-vos en contacte amb l'administrador. - + Nom d'usuari - + Comproveu el vostre nom d'usuari i contrasenya. Si encara no podeu iniciar sessió, poseu-vos en contacte amb el vostre administrador. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.de-DE.resx b/src/Server.UI/Resources/Pages/Authentication/Login.de-DE.resx index 9f9918083..641eb7312 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.de-DE.resx @@ -1,180 +1,190 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Sie haben noch kein Konto? - + Passwort vergessen? - + Kennwort - + Passwort ist erforderlich! - + Das Passwort muss mindestens die Länge 6 haben - + Das Passwort muss mindestens einen Großbuchstaben enthalten - + Passwort muss mindestens eine Ziffer enthalten - + Passwort muss mindestens einen Kleinbuchstaben enthalten - + Bitte überprüfen Sie Ihren Benutzernamen und Ihr Passwort. Wenn Sie sich immer noch nicht anmelden können, wenden Sie sich an Ihren Administrator. - + Erinnern Sie sich an mich? - + Anmelden - + Anmelden - + Name des Benutzers - + Der Benutzername ist erforderlich! - + Kein Benutzer gefunden oder keine Berechtigung, bitte wenden Sie sich an den Administrator. - + Benutzername wird benötigt! - + Bitte überprüfen Sie Ihren Benutzernamen und Ihr Passwort. Wenn Sie sich immer noch nicht anmelden können, wenden Sie sich an Ihren Administrator. - + Kein Benutzer gefunden oder keine Berechtigung, wenden Sie sich bitte an den Administrator. - + Nutzername - + Bitte überprüfen Sie Ihren Benutzernamen und Ihr Passwort. Wenn Sie sich immer noch nicht anmelden können, wenden Sie sich an Ihren Administrator. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.en.resx b/src/Server.UI/Resources/Pages/Authentication/Login.en.resx index 36a2ac2e2..3871c2f04 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.en.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.en.resx @@ -1,180 +1,190 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Don't have an account? - + Forgot password? - + Password - + Password is required! - + Password must be at least of length 6 - + Password must contain at least one capital letter - + Password must contain at least one digit - + Password must contain at least one lowercase letter - + Please check your username and password. If you are still unable to log in, contact your administrator. - + Remember me? - + Sign In - + Sign Up - + Username - + Username is required! - + No user found, or no authorization, please contact the administrator. - + User name is required! - + Please check your username and password. If you are still unable to log in, contact your administrator. - + No user found, or no authorization, please contact the administrator. - + User name - + Please check your username and password. If you are still unable to log in, contact your administrator. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.es-ES.resx b/src/Server.UI/Resources/Pages/Authentication/Login.es-ES.resx index ba0d3840e..aa6be15f6 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.es-ES.resx @@ -1,180 +1,190 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + ¿No tiene una cuenta? - + ¿Ha olvidado su contraseña? - + Contraseña - + ¡La contraseña es obligatoria! - + La contraseña debe tener una longitud mínima de 6 - + La contraseña debe contener al menos una letra mayúscula - + La contraseña debe contener al menos un dígito - + La contraseña debe contener al menos una letra minúscula - + Por favor, compruebe su nombre de usuario y contraseña. Si sigue sin poder conectarse, póngase en contacto con su administrador. - + ¿Me recuerdas? - + Iniciar sesión - + Registrarse - + Nombre de usuario - + ¡El nombre de usuario es obligatorio! - + No se encontró ningún usuario o no hay autorización, comuníquese con el administrador. - + ¡Se requiere nombre de usuario! - + Por favor verifique su nombre de usuario y contraseña. Si sigue sin poder iniciar sesión, póngase en contacto con su administrador. - + No se encontró ningún usuario o no hubo autorización, comuníquese con el administrador. - + Nombre de usuario - + Por favor verifique su nombre de usuario y contraseña. Si sigue sin poder iniciar sesión, póngase en contacto con su administrador. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.fr-FR.resx b/src/Server.UI/Resources/Pages/Authentication/Login.fr-FR.resx index b9ceee855..993799a07 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.fr-FR.resx @@ -1,180 +1,190 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Vous n'avez pas de compte ? - + Mot de passe oublié ? - + Mot de passe - + Le mot de passe est obligatoire ! - + Le mot de passe doit être au moins de longueur 6 - + Le mot de passe doit contenir au moins une lettre majuscule - + Le mot de passe doit contenir au moins un chiffre - + Le mot de passe doit contenir au moins une lettre minuscule - + Veuillez vérifier votre nom d'utilisateur et votre mot de passe. Si vous n'arrivez toujours pas à vous connecter, contactez votre administrateur. - + Se souvenir de moi ? - + Se connecter - + S'inscrire - + Nom d'utilisateur - + Le nom d'utilisateur est obligatoire ! - + Aucun utilisateur trouvé, ou aucune autorisation, veuillez contacter l'administrateur. - + Nom d'utilisateur est nécessaire! - + Veuillez vérifier votre nom d'utilisateur et votre mot de passe. Si vous ne parvenez toujours pas à vous connecter, contactez votre administrateur. - + Aucun utilisateur trouvé, ou aucune autorisation, veuillez contacter l'administrateur. - + Nom d'utilisateur - + Veuillez vérifier votre nom d'utilisateur et votre mot de passe. Si vous ne parvenez toujours pas à vous connecter, contactez votre administrateur. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.ja-JP.resx b/src/Server.UI/Resources/Pages/Authentication/Login.ja-JP.resx index 85db754fa..666584dc9 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.ja-JP.resx @@ -1,180 +1,190 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + アカウントをお持ちでない方 - + パスワードをお忘れの方 - + パスワード - + パスワードが必要です - + パスワードは6文字以上である必要があります。 - + パスワードには、少なくとも1つの大文字が含まれていなければなりません。 - + パスワードには、少なくとも1つの数字が含まれていなければなりません。 - + パスワードには、少なくとも1つの小文字が含まれている必要があります。 - + ユーザー名とパスワードを確認してください。 それでもログインできない場合は、管理者にお問い合わせください。 - + 私を覚えていますか? - + サインイン - + サインアップ - + ユーザー名 - + ユーザー名が必要です - + ユーザーが見つからないか、権限がありません。管理者に連絡してください。 - + ユーザー名は必須です! - + ユーザー名とパスワードを確認してください。 それでもログインできない場合は、管理者に問い合わせてください。 - + ユーザーが見つからないか、権限がありません。管理者に連絡してください。 - + ユーザー名 - + ユーザー名とパスワードを確認してください。 それでもログインできない場合は、管理者に問い合わせてください。 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.km-KH.resx b/src/Server.UI/Resources/Pages/Authentication/Login.km-KH.resx index 824442972..b7fafb495 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.km-KH.resx @@ -1,180 +1,190 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 계정이 없으신가요? - + 비밀번호를 잊으 셨나요? - + 비밀번호 - + 비밀번호가 필요합니다! - + 암호는 길이가 6 이상이어야 합니다. - + 비밀번호는 적어도 하나의 대문자를 포함해야 합니다 - + 비밀번호는 하나 이상의 숫자를 포함해야 합니다. - + 비밀번호에는 소문자가 하나 이상 포함되어야 합니다. - + 사용자 이름과 비밀번호를 확인하세요. 여전히 로그인할 수 없으면 관리자에게 문의하십시오. - + 날 기억해? - + 로그인 - + 가입하기 - + 사용자 이름 - + 사용자 이름이 필요합니다! - + 사용자를 찾을 수 없거나 권한이 없습니다. 관리자에게 문의하세요. - + 사용자 이름이 필요합니다! - + 사용자 이름과 비밀번호를 확인하세요. 여전히 로그인할 수 없으면 관리자에게 문의하십시오. - + 사용자를 찾을 수 없거나 권한이 없습니다. 관리자에게 문의하십시오. - + 사용자 이름 - + 사용자 이름과 비밀번호를 확인하세요. 여전히 로그인할 수 없으면 관리자에게 문의하십시오. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.resx b/src/Server.UI/Resources/Pages/Authentication/Login.resx index 845c24f5e..b1846528d 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.resx @@ -1,180 +1,190 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Don't have an account? - + Forgot password? - + Password - + Password is required! - + Password must be at least 6 characters - + Password must contain at least one capital letter - + Password must contain at least one digit - + Password must contain at least one lowercase letter - + Please check your username and password. If you are still unable to log in, contact an administrator. - + Remember me? - + Sign In - + Sign Up - + Username - + Username is required! - + No user found, or no authorization, please contact an administrator. - + User name is required! - + Please check your username and password. If you are still unable to log in, contact your administrator. - + No user found, or no authorization, please contact the administrator. - + User name - + Please check your username and password. If you are still unable to log in, contact your administrator. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.ru.resx b/src/Server.UI/Resources/Pages/Authentication/Login.ru.resx index 1ca771e88..637b09ddb 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.ru.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.ru.resx @@ -1,180 +1,190 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + У вас нет учетной записи? - + Забыли пароль? - + Пароль - + Пароль обязателен! - + Пароль должен быть длиной не менее 6 - + Пароль должен содержать хотя бы одну заглавную букву - + Пароль должен содержать хотя бы одну цифру - + Пароль должен содержать хотя бы одну строчную букву - + Пожалуйста, проверьте свое имя пользователя и пароль. Если вы все еще не можете войти в систему, свяжитесь с вашим администратором. - + Запомнить меня? - + Войти - + Зарегистрироваться - + Имя пользователя - + Имя пользователя обязательно! - + Пользователь не найден или нет авторизации, обратитесь к администратору. - + Имя пользователя требуется! - + Пожалуйста, проверьте ваше имя пользователя и пароль. Если вы по-прежнему не можете войти в систему, обратитесь к администратору. - + Пользователь не найден или нет авторизации, обратитесь к администратору. - + Имя пользователя - + Пожалуйста, проверьте ваше имя пользователя и пароль. Если вы по-прежнему не можете войти в систему, обратитесь к администратору. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.zh-CN.resx b/src/Server.UI/Resources/Pages/Authentication/Login.zh-CN.resx index 4ca052fa4..fb14ab8ef 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.zh-CN.resx @@ -1,180 +1,190 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 还没账号? - + 忘记密码? - + 密码 - + 密码必填! - + 密码长度至少6位 - + 密码必须包含大写字母 - + 密码必须包含小写字母 - + 密码必须包含数字 - + 请检查用户名和密码, 如果还是不能登录, 请联系管理员 - + 记住我 - + 登录 - + 注册 - + 用户名 - + 用户名必填 - + 请检查您的用户名和密码。 如果您仍然无法登录,请联系您的管理员。 - + 没有找到用户,或者没有授权,请联系管理员。 - + 请检查用户名和密码, 如果还是不能登录, 请联系管理员 - + 用户名 - + 用户名必填 - + 没有找到该用户, 请联系管理员 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.ar-IQ.resx b/src/Server.UI/Resources/Pages/Authentication/Register.ar-IQ.resx index 035a32707..fd931c953 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.ar-IQ.resx @@ -1,159 +1,165 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + البريد الالكترونى - + البريد الإلكتروني مطلوب! - + هل لديك حساب؟ - + أوافق على الشروط والخصوصية - + شعار - + كلمة المرور مطلوبة! - + سجل - + سجل بنجاح! - + تسجيل الدخول - + التسجيل - + اسم المستخدم - + اسم المستخدم مطلوب! - + تأكيد كلمة المرور \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.ca-ES.resx b/src/Server.UI/Resources/Pages/Authentication/Register.ca-ES.resx index 415dc1c47..d10a1ba91 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.ca-ES.resx @@ -1,159 +1,165 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Correu electrónico - + El correu electrònic és obligatori! - + Tens un compte? - + Accepto els termes i la privadesa - + Contrasenya - + Es requereix la contrasenya! - + Registre - + Registrat amb èxit! - + Iniciar sessió - + Registrar-se - + Nom d'usuari - + El nom d'usuari és obligatori! - + Confirma la contrassenya \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.de-DE.resx b/src/Server.UI/Resources/Pages/Authentication/Register.de-DE.resx index 988a4add6..96fc2bd36 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.de-DE.resx @@ -1,159 +1,165 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + E-Mail - + E-Mail ist erforderlich! - + Haben Sie ein Konto? - + Ich stimme den Bedingungen und dem Datenschutz zu - + Kennwort - + Passwort ist erforderlich! - + Registrieren - + Erfolgreich registriert! - + Anmelden - + Anmelden - + Name des Benutzers - + Benutzername ist erforderlich! - + Bestätige das Passwort \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.en.resx b/src/Server.UI/Resources/Pages/Authentication/Register.en.resx index 0d6008c75..0eea05cf3 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.en.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.en.resx @@ -1,159 +1,165 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + E-mail - + e-mail is required! - + have an account? - + I agree to the terms and privacy - + Password - + password is required! - + Register - + Register successfully! - + Sign In - + Sign Up - + User Name - + user name is required! - + Confirm Password \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.es-ES.resx b/src/Server.UI/Resources/Pages/Authentication/Register.es-ES.resx index 33fcb9b99..d83580fe2 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.es-ES.resx @@ -1,159 +1,165 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Correo electrónico - + ¡el correo electrónico es obligatorio! - + ¿tiene una cuenta? - + Acepto los términos y la privacidad - + Contraseña - + ¡Se requiere la contraseña! - + Registro - + ¡Regístrese con éxito! - + Iniciar sesión - + Registrarse - + Nombre de usuario - + ¡el nombre de usuario es obligatorio! - + confirmar Contraseña \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.fr-FR.resx b/src/Server.UI/Resources/Pages/Authentication/Register.fr-FR.resx index fac755d32..016c8c829 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.fr-FR.resx @@ -1,159 +1,165 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + E-mail - + L'e-mail est obligatoire ! - + Vous avez un compte ? - + J'accepte les conditions et la confidentialité - + Mot de passe - + Le mot de passe est requis ! - + S'inscrire - + Enregistrez-vous avec succès ! - + Se connecter - + S'inscrire - + Nom de l'utilisateur - + Le nom d'utilisateur est obligatoire ! - + Confirmez le mot de passe \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.ja-JP.resx b/src/Server.UI/Resources/Pages/Authentication/Register.ja-JP.resx index ec0fb0a9d..64f91825a 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.ja-JP.resx @@ -1,159 +1,165 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 電子メール - + 電子メールは必須です - + アカウントをお持ちですか? - + 私は規約とプライバシーに同意します - + パスワード - + パスワードが必要です - + 会員登録 - + 登録完了 - + サインイン - + サインアップ - + ユーザー名 - + ユーザーネームは必須です - + パスワードを認証する \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.km-KH.resx b/src/Server.UI/Resources/Pages/Authentication/Register.km-KH.resx index fa674bcd0..fa8be79f3 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.km-KH.resx @@ -1,159 +1,165 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 이메일 - + 이메일은 필수입니다! - + 계정이있다? - + 약관 및 개인정보 보호에 동의합니다. - + 비밀번호 - + 비밀번호가 필요합니다! - + 등록하다 - + 성공적으로 등록하십시오! - + 로그인 - + 가입하기 - + 사용자 이름 - + 사용자 이름이 필요합니다! - + 비밀번호 확인 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.resx b/src/Server.UI/Resources/Pages/Authentication/Register.resx index a41ac32ae..e656f73de 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.resx @@ -1,159 +1,165 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Confirm Password - + E-mail - + E-mail is required! - + Have an account? - + I agree to the terms and privacy - + Password - + Password is required! - + Register - + Register successfully! - + Sign In - + Sign Up - + Username - + Username is required! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.ru.resx b/src/Server.UI/Resources/Pages/Authentication/Register.ru.resx index dfacd8ba6..21d98ac1a 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.ru.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.ru.resx @@ -1,159 +1,165 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Электронная почта - + электронная почта обязательна! - + У вас есть аккаунт? - + Я согласен с условиями и конфиденциальностью - + Пароль - + Пароль обязателен! - + Зарегистрируйтесь - + Регистрация прошла успешно! - + Войти - + Зарегистрироваться - + Имя пользователя - + имя пользователя обязательно! - + Подтвердите пароль \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.zh-CN.resx b/src/Server.UI/Resources/Pages/Authentication/Register.zh-CN.resx index 6aa07bd20..bdd86a187 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.zh-CN.resx @@ -1,159 +1,165 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 电子邮件 - + 电子邮件必填! - + 我同意条款和隐私 - + 密码 - + 密码必填! - + 注册 - + 注册成功! - + 用户名 - + 用户名必填 - + 已有账号? - + 登录 - + 注册 - + 确认密码 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.ar-IQ.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.ar-IQ.resx index 6f0909f2c..f833c8a7f 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.ar-IQ.resx @@ -1,126 +1,132 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + كلمة السر الجديدة - + تعيين كلمة مرور جديدة \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.ca-ES.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.ca-ES.resx index 5b7c8138b..32d00dd74 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.ca-ES.resx @@ -1,126 +1,132 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nova contrasenya - + Establir nova contrasenya \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.de-DE.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.de-DE.resx index a1c599fc2..b397ea883 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.de-DE.resx @@ -1,126 +1,132 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Neues Passwort - + Neues Passwort festlegen \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.en.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.en.resx index 756633960..e8b692910 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.en.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.en.resx @@ -1,126 +1,132 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + New Password - + Set new password \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.es-ES.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.es-ES.resx index b151c1446..3e885c364 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.es-ES.resx @@ -1,126 +1,132 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nueva contraseña - + Establecer nueva contraseña \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.fr-FR.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.fr-FR.resx index a37c7de7b..8d8ba48a8 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.fr-FR.resx @@ -1,126 +1,132 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nouveau mot de passe - + Définir un nouveau mot de passe \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.ja-JP.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.ja-JP.resx index 428f77fb0..053e008d5 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.ja-JP.resx @@ -1,126 +1,132 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 新しいパスワード - + 新しいパスワードの設定 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.km-KH.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.km-KH.resx index a277270c7..cf85ed46d 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.km-KH.resx @@ -1,126 +1,132 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 새 비밀번호 - + 새 비밀번호 설정 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.resx index 01e3db958..3666981ef 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.resx @@ -1,126 +1,132 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + New Password - + Set new password \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.ru.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.ru.resx index 4494db500..bb996b437 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.ru.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.ru.resx @@ -1,126 +1,132 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Новый пароль - + Установить новый пароль \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.zh-CN.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.zh-CN.resx index e295cb4ec..5afe06b45 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.zh-CN.resx @@ -1,126 +1,132 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 新密码 - + 新密码 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.ar-IQ.resx b/src/Server.UI/Resources/Pages/Documents/Documents.ar-IQ.resx index 9d8b1b6f3..e9028bf6e 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.ar-IQ.resx @@ -1,183 +1,189 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + الملحق - + نوع المستند - + نوع المستند مطلوب! - + الوثائق - + هل هو عام - + حدد نوع المستند - + اسم المستأجر - + عنوان - + العنوان مطلوب! - + رفع - + تحميل بنجاح - + بدأت مهمة {0}. - + اكتمل التعرف على {0}. - + اختر الملفات - + محتوى - + يسمح فقط بملفات .jpg والملفات .png. - + يرجى النقر فوق الزر [اختر ملفات] لتحميل صورتك. - + التعرف على النتيجة - + تحميل الصور - + تحميل - + مالك \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.ca-ES.resx b/src/Server.UI/Resources/Pages/Documents/Documents.ca-ES.resx index c38bf690e..0e847c4b1 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.ca-ES.resx @@ -1,183 +1,189 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Adjunt - + Tipus de document - + El tipus de document és obligatori - + Documents - + És públic - + Seleccionar tipus de document - + Nom del arrendatari - + Títol - + El títol és obligatori - + Carregar - + Carregat amb con èxit - + Descarregar - + Propietari - + {0} feina començada. - + {0} reconeixement completat. - + Carrega Imatges - + Reconeix el resultat - + Si us plau, feu clic al botó [Tria fitxers] per pujar la vostra foto. - + Només es permeten fitxers .jpg i .png. - + Trieu fitxers - + Contingut \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.de-DE.resx b/src/Server.UI/Resources/Pages/Documents/Documents.de-DE.resx index 4898ba7c8..4259d79d3 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.de-DE.resx @@ -1,183 +1,189 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Anhang - + Dokumenttyp - + Dokumenttyp ist erforderlich! - + Dokumente - + Ist öffentlich - + Dokumententyp auswählen - + Name des Mieters - + Titel - + Titel ist erforderlich! - + Hochladen - + Upload erfolgreich - + {0} Job gestartet. - + {0} erkennen abgeschlossen. - + Dateien auswählen - + Inhalt - + Nur .jpg und .png Dateien sind erlaubt. - + Bitte klicken Sie auf die Schaltfläche [Dateien auswählen], um Ihr Foto hochzuladen. - + Erkennen Sie das Ergebnis - + Bilder hochladen - + Download - + Eigentümer \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.en.resx b/src/Server.UI/Resources/Pages/Documents/Documents.en.resx index 008488b97..15fc5019f 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.en.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.en.resx @@ -1,183 +1,189 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Attachement - + Document Type - + Document type is required! - + Documents - + Is Public - + Select Document Type - + Tenant Name - + Title - + Title is required! - + Upload - + Upload successfully - + {0} job started. - + {0} recognize completed. - + Choose files - + Content - + Only .jpg and .png files are allowed. - + Please click [Choose Files] button to upload your photo. - + Recognize result - + Upload Pictures - + Download - + Owner \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.es-ES.resx b/src/Server.UI/Resources/Pages/Documents/Documents.es-ES.resx index 787282fdf..b66f0090c 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.es-ES.resx @@ -1,183 +1,189 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Adjunto - + Tipo de documento - + El tipo de documento es obligatorio - + Documentos - + Es público - + Seleccione el tipo de documento - + Nombre del inquilino - + Título - + El título es obligatorio - + Cargar - + Subir con éxito - + {0} trabajo iniciado. - + {0} reconocimiento completado. - + Elija los archivos - + Contenido - + Sólo se permiten archivos .jpg y .png. - + Por favor, haga clic en el botón [Choose Files] para subir su foto. - + Reconocer resultado - + Subir fotos - + Descargar - + Dueño \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.fr-FR.resx b/src/Server.UI/Resources/Pages/Documents/Documents.fr-FR.resx index 3358251b3..c958f227e 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.fr-FR.resx @@ -1,183 +1,189 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Pièce jointe - + Type de document - + Le type de document est obligatoire ! - + Documents - + Est public - + Sélectionnez le type de document - + Nom du locataire - + Titre - + Le titre est obligatoire ! - + Télécharger - + Télécharger avec succès - + {0} tâche démarrée. - + {0} reconnaissance terminée. - + Choisir les fichiers - + Contenu - + Seuls les fichiers .jpg et .png sont autorisés. - + Veuillez cliquer sur le bouton [Choose Files] pour télécharger votre photo. - + Reconnaître le résultat - + Télécharger les photos - + Télécharger - + Propriétaire \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.ja-JP.resx b/src/Server.UI/Resources/Pages/Documents/Documents.ja-JP.resx index 242fb411d..6458910c5 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.ja-JP.resx @@ -1,183 +1,189 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 添付ファイル - + ドキュメントタイプ - + ドキュメントの種類は必須です - + ドキュメント - + 公開 - + 書類の種類を選択 - + テナント名 - + 役職名 - + タイトルが必要です。 - + アップロード - + アップロードに成功しました。 - + {0} ジョブが開始されました。 - + {0} の認識が完了しました。 - + ファイルを選択 - + 内容 - + .jpgと.pngのファイルのみ使用可能です。 - + ファイルを選択]ボタンをクリックして、写真をアップロードしてください。 - + 認識結果 - + 写真をアップロードする - + ダウンロード - + オーナー \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.km-KH.resx b/src/Server.UI/Resources/Pages/Documents/Documents.km-KH.resx index 6bf8af889..4dc51161f 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.km-KH.resx @@ -1,183 +1,189 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 부착 - + 문서 유형 - + 문서 유형이 필요합니다! - + 문서 - + 공개됨 - + 문서 유형 선택 - + 테넌트 이름 - + 타이틀 - + 제목이 필요합니다! - + 업로드 - + 업로드에 성공했습니다. - + {0} 작업이 시작되었습니다. - + {0} 인식이 완료되었습니다. - + 파일 선택 - + 콘텐츠 - + .jpg 및 .png 파일만 허용됩니다. - + [파일 선택] 버튼을 클릭하여 사진을 업로드하십시오. - + 결과 인식 - + 사진 업로드 - + 다운로드 - + 소유자 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.resx b/src/Server.UI/Resources/Pages/Documents/Documents.resx index 6de0e4e1e..70d4db541 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.resx @@ -1,183 +1,189 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Attachement - + Choose files - + Content - + Document Type - + Document type is required! - + Documents - + Is Public - + Only .jpg and .png files are allowed. - + Please click [Choose Files] button to upload your photo. - + Recognize result - + Select Document Type - + Tenant Name - + Title - + Title is required! - + Upload - + Upload Pictures - + Upload successfully - + {0} job started. - + {0} recognize completed. - + Download - + Owner \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.ru.resx b/src/Server.UI/Resources/Pages/Documents/Documents.ru.resx index 21b6fee65..5cdf43970 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.ru.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.ru.resx @@ -1,183 +1,189 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Вложение - + Тип документа - + Тип документа обязателен! - + Документы - + Публичный - + Выберите тип документа - + Имя арендатора - + Название - + Название обязательно! - + Загрузить - + Загрузка прошла успешно - + Задание {0} запущено. - + {0} признать завершенным. - + Выберите файлы - + Содержание - + Разрешены только файлы .jpg и .png. - + Пожалуйста, нажмите кнопку [Choose Files] для загрузки фотографии. - + Распознать результат - + Загрузить фотографии - + Скачать - + Владелец \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.zh-CN.resx b/src/Server.UI/Resources/Pages/Documents/Documents.zh-CN.resx index fab263dc9..bc815e40d 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.zh-CN.resx @@ -1,183 +1,189 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 附件 - + 文档类型 - + 文档类型必填! - + 文档 - + 是否公开 - + 选择文档类型 - + 租户名称 - + 文档名称 - + 文档必填 - + 上传 - + 上传成功 - + {0} 开始处理. - + {0} 识别完成. - + 选择上传的图片 - + 文本内容 - + 只允许上传 .jpg 和 .png 文件. - + 请单击【上传】按钮上传需要解析的图片 - + 识别结果 - + 上传图片 - + 下载 - + 所有人 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ar-IQ.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ar-IQ.resx index 79a1fb04b..15acbffb5 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ar-IQ.resx @@ -1,162 +1,168 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + تعيين التغييرات بنجاح - + تم تعيينه بنجاح - + إنشاء دور جديد - + وصف - + تحرير الدور - + اسم - + ادوار - + البحث عن اسم الدور - + تعيين الأذونات - + إلغاء التعيين بنجاح - + تمت إزالة الإذن بنجاح! - + الأدوار المعينة - + البريد الإلكتروني / رقم الهاتف - + تمت إضافة الإذن بنجاح! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ca-ES.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ca-ES.resx index 2ad2d2427..494ca3265 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ca-ES.resx @@ -1,162 +1,168 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Assignació canviada amb èxit - + Assignat amb èxit - + Crear un nou rol - + Descripció - + Editar el rol - + Nom - + Rols - + Buscar per nom de rol - + Establir permisos - + Desassignat amb èxit - + S'ha eliminat el permís correctament! - + Rols assignats - + Correu electrònic/Número de telèfon - + S'ha afegit el permís correctament! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.de-DE.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.de-DE.resx index 9c426c39f..960c9f79d 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.de-DE.resx @@ -1,162 +1,168 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Zuweisung erfolgreich geändert - + Erfolgreich zugewiesen - + Eine neue Rolle erstellen - + Beschreibung - + Bearbeiten Sie die Rolle - + Name - + Rollen - + Suche nach Rollenname - + Berechtigungen festlegen - + Nicht zugewiesen erfolgreich - + Berechtigung erfolgreich entfernt! - + Zugewiesene Rollen - + E-Mail / Telefonnummer - + Berechtigung erfolgreich hinzugefügt! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.en.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.en.resx index 7d6a5d92b..0b8d97ebd 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.en.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.en.resx @@ -1,162 +1,168 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Assign changed successfully - + Assigned successfully - + Create a new role - + Description - + Edit the role - + Name - + Roles - + Search for role name - + Set Permissions - + Unassigned successfully - + Assigned Roles - + Email / PhoneNumber - + Permission removed successfully! - + Permission added successfully! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.es-ES.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.es-ES.resx index 3652e5b27..1d7d9c450 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.es-ES.resx @@ -1,162 +1,168 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Asignación cambiada con éxito - + Asignado con éxito - + Crear un nuevo rol - + Descripción - + Editar el rol - + Nombre - + Roles - + Buscar el nombre de la función - + Establecer permisos - + No asignado con éxito - + ¡Permiso eliminado con éxito! - + Roles asignados - + Correo electrónico / Número de teléfono - + ¡Permiso agregado exitosamente! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.fr-FR.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.fr-FR.resx index 1441c1802..f191b204e 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.fr-FR.resx @@ -1,162 +1,168 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + L'affectation a été modifiée avec succès - + Attribué avec succès - + Créer un nouveau rôle - + Description - + Modifier le rôle - + Nom - + Rôles - + Recherche du nom du rôle - + Définir les autorisations - + Non attribué avec succès - + Autorisation supprimée avec succès ! - + Rôles attribués - + E-mail / Numéro de téléphone - + Autorisation ajoutée avec succès ! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ja-JP.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ja-JP.resx index 3fae0868c..c11efdc44 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ja-JP.resx @@ -1,162 +1,168 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + アサインが正常に変更されました - + 正常に割り当てられた - + 新しいロールの作成 - + 商品説明 - + 役割の編集 - + 名前 - + 役割 - + 役割名を検索する - + アクセス権の設定 - + 無事未設定 - + 権限が正常に削除されました。 - + 割り当てられた役割 - + メールアドレス/電話番号 - + 権限が正常に追加されました。 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.km-KH.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.km-KH.resx index c63734a3c..79668d811 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.km-KH.resx @@ -1,162 +1,168 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 할당이 성공적으로 변경되었습니다. - + 성공적으로 할당됨 - + 새 역할 만들기 - + 설명 - + 역할 수정 - + 이름 - + 역할 - + 역할 이름 검색 - + 권한 설정 - + 할당 해제됨 - + 권한이 성공적으로 제거되었습니다! - + 할당된 역할 - + 이메일 / 전화번호 - + 권한이 성공적으로 추가되었습니다! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.resx index eece0b0d8..0a5698183 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.resx @@ -1,162 +1,168 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Assign changed successfully - + Assigned successfully - + Create a new role - + Description - + Edit the role - + Name - + Roles - + Search for role name - + Set Permissions - + Unassigned successfully - + Assigned Roles - + Email / PhoneNumber - + Permission added successfully! - + Permission removed successfully! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ru.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ru.resx index 345f705f7..6c43f1e95 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ru.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ru.resx @@ -1,162 +1,168 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Назначение успешно изменено - + Назначено успешно - + Создать новую роль - + Описание - + Редактировать роль - + Имя - + Роли - + Поиск имени роли - + Установить разрешения - + Не назначено успешно - + Разрешение успешно удалено! - + Назначенные роли - + Электронная почта / номер телефона - + Разрешение успешно добавлено! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.zh-CN.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.zh-CN.resx index ffc95edf5..ec53dd41d 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.zh-CN.resx @@ -1,162 +1,168 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 授权更新成功 - + 授权成功 - + 创建新角色 - + 描述 - + 编辑角色 - + 角色 - + 搜索关键字 - + 设置权限 - + 取消授权成功 - + 角色名称 - + 已授权角色 - + 电子邮件 / 电话 - + 权限删除成功 - + 授权成功 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.ar-IQ.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.ar-IQ.resx index 9bb3e8b79..0f24cad65 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.ar-IQ.resx @@ -1,174 +1,180 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + تغيير كلمة المرور - + تم تغيير كلمة المرور بنجاح. - + انقر على تحميل صورة. - + تأكيد كلمة المرور الجديدة - + كلمة المرور الحالية - + كلمة المرور الحالية مطلوبة! - + اسم العرض - + البريد الإلكتروني - + كلمة السر الجديدة - + كلمة المرور مطلوبة! - + رقم الهاتف - + ملف تعريف - + حفظ التغييرات - + التحديث بنجاح - + اسم المستخدم - + الاسم المتفوق - + اسم المستأجر - + حالة \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.ca-ES.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.ca-ES.resx index 164454df4..8d8fc4697 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.ca-ES.resx @@ -1,174 +1,180 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Canvia la contrasenya - + S'ha canviat la contrasenya correctament. - + Feu clic a carregar una foto. - + Confirmar nova contrasenya - + Contrasenya actual - + la contrasenya actual és necessària! - + Nom de visualització - + Correu electrònic - + Nova contrasenya - + Es requereix contrasenya! - + Número de telèfon - + Perfil - + Guardar canvis - + Actualitzat correctament - + Nom d'usuari - + Estat - + Nom superior - + Nom de l'arrendatari \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.de-DE.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.de-DE.resx index b2a9c02af..5b20477d2 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.de-DE.resx @@ -1,174 +1,180 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Passwort ändern - + Das Passwort wurde erfolgreich geändert. - + Klicken Sie auf ein Foto hochladen. - + Bestätigen Sie das neue Passwort - + Aktuelles Passwort - + aktuelles Passwort ist erforderlich! - + Name der Anzeige - + E-Mail - + Neues Kennwort - + Passwort ist erforderlich! - + Telefonnummer - + Profil - + Änderungen speichern - + Erfolgreich aktualisieren - + Name des Benutzers - + Vorgesetzter Name - + Tenant Name - + Status \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.en.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.en.resx index 37a72752f..28cb781bb 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.en.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.en.resx @@ -1,174 +1,180 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Change Password - + Changed password successfully. - + Click upload a photo. - + Confirm New Password - + Current Password - + current password is required! - + Display Name - + Email - + New Password - + password is required! - + Phone Number - + Profile - + Save Changes - + Update successfully - + User Name - + Tenant Name - + Status - + Superior Name \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.es-ES.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.es-ES.resx index 17c222af5..c9e0aa0d8 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.es-ES.resx @@ -1,174 +1,180 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Cambiar contraseña - + Cambió la contraseña con éxito. - + Haga clic en subir una foto. - + Confirmar nueva contraseña - + Contraseña actual - + ¡se requiere la contraseña actual! - + Nombre de la pantalla - + Correo electrónico - + Nueva contraseña - + ¡se requiere la contraseña! - + Número de teléfono - + Perfil - + Guardar cambios - + Actualizar con éxito - + Nombre de usuario - + Nombre superior - + Nombre del inquilino - + Estado \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.fr-FR.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.fr-FR.resx index 8e5040172..aa272d447 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.fr-FR.resx @@ -1,174 +1,180 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Changer le mot de passe - + Le mot de passe a été modifié avec succès. - + Cliquez sur télécharger une photo. - + Confirmer le nouveau mot de passe - + Mot de passe actuel - + Le mot de passe actuel est requis ! - + Nom de l'affichage - + Courriel - + Nouveau mot de passe - + Le mot de passe est requis ! - + Numéro de téléphone - + Profil - + Sauvegarder les changements - + Mise à jour réussie - + Nom de l'utilisateur - + Nom supérieur - + Tenant Name - + Statut \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.ja-JP.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.ja-JP.resx index 9768e9588..8f9bb64c0 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.ja-JP.resx @@ -1,174 +1,180 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + パスワードの変更 - + パスワードの変更に成功しました。 - + 写真をアップロードするをクリックしてください。 - + 新しいパスワードの確認 - + 現在のパスワード - + 現在のパスワードが必要です - + 表示名 - + 電子メール - + 新しいパスワード - + パスワードが必要です - + 電話番号 - + プロフィール - + 変更を保存する - + 更新成功 - + ユーザー名 - + 上司の名前 - + テナント名 - + スターテス \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.km-KH.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.km-KH.resx index 8ab79375f..249af519f 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.km-KH.resx @@ -1,174 +1,180 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 비밀번호 변경 - + 비밀번호를 성공적으로 변경했습니다. - + 사진 업로드를 클릭합니다. - + 새 암호를 확인합니다 - + 현재 비밀번호 - + 현재 비밀번호가 필요합니다! - + 이름 표시하기 - + 이메일 - + 새 비밀번호 - + 비밀번호가 필요합니다! - + 전화 번호 - + 프로필 - + 변경 사항을 저장하다 - + 업데이트 성공 - + 사용자 이름 - + 상위 이름 - + 세입자 이름 - + 상태 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.resx index 1ecea1649..3716996f8 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.resx @@ -1,174 +1,180 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Change Password - + Changed password successfully. - + Click to upload a photo. - + Confirm New Password - + Current Password - + Current password is required! - + Display Name - + Email - + New Password - + Password is required! - + Phone Number - + Profile - + Save Changes - + Update successfully - + Username - + Tenant Name - + Status - + Superior Name \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.ru.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.ru.resx index f64311eaf..c5793a8a8 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.ru.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.ru.resx @@ -1,174 +1,180 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Изменить пароль - + Пароль успешно изменен. - + Нажмите загрузить фотографию. - + Подтвердите новый пароль - + Текущий пароль - + текущий пароль обязателен! - + Имя дисплея - + Электронная почта - + Новый пароль - + пароль обязателен! - + Номер телефона - + Профиль - + Сохранить изменения - + Обновить успешно - + Имя пользователя - + Высшее имя - + Имя арендатора - + Положение дел \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.zh-CN.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.zh-CN.resx index b43121915..855a3f06c 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.zh-CN.resx @@ -1,174 +1,180 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 修改密码 - + 密码修改成功 - + 单击上传照片. - + 确认新密码 - + 当前密码 - + 当前密码必填! - + 显示名称 - + 电子邮件 - + 新密码 - + 密码必填 - + 电话号码 - + 简档 - + 保存 - + 更新成功 - + 用户名 - + 租户名称 - + 状态 - + 上级 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.ar-IQ.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.ar-IQ.resx index 09e832d7f..b696fbffd 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.ar-IQ.resx @@ -1,234 +1,237 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + تعيين الأدوار - + انقر على تحميل صورة. - + تأكيد كلمة المرور الجديدة - + تأكيد كلمة المرور مطلوب! - + إنشاء مستخدم جديد - + تحرير المستخدم - + البريد الإلكتروني - + نشط - + حالة القفل - + كلمة السر الجديدة - + كلمة المرور مطلوبة! - + رقم الهاتف - + إعادة تعيين كلمة المرور بنجاح - - كلمة مرور الراحة - - + البحث عن اسم المستخدم - + اختر المستأجر - + تعيين نشط - + تعيين غير نشط - + تعيين كلمة المرور - + موقع - + اسم المستأجر - + اسم المستخدم - + المستعملون - + {0} الجلسة تغيرت. - + مزود - + الاسم المتفوق - + حدد سوبريور - + البريد الإلكتروني - + كلمة المرور - + حالة - + تأكيد كلمة المرور - + اسم العرض - + تعيين أذونات - - إعادة تعيين كلمة المرور - - + الأدوار المعينة - + البريد الإلكتروني / رقم الهاتف - + تمت إزالة الإذن بنجاح! - + تمت إضافة الإذن بنجاح! + + إعادة تعيين كلمة المرور + \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.ca-ES.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.ca-ES.resx index ed910f872..6783b6e98 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.ca-ES.resx @@ -1,234 +1,237 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0} sessión cambiada. - + Assignar Rols - + Feu clic per carregar una foto. - + Confirmar nova contrasenya - + és nescessari confirmar la contrasenya - + Crea un usuari nou - + Editar l'usuari - + Correu electrònic - + Està actiu - + Estat de bloqueig - + Nova contrasenya - + Es requereix contrasenya! - + Número de telèfon - + Restablerta la contrasenya correctament - - Restablir la contrasenya - - + Buscar per nom de l'usuari - + Estableix actiu - + Estableix inactiu - + Estableix contrasenya - + Lloc - + Nom de l'usuari - + Usuaris - + Seleccioneu arrendatari - + Nom del arrendatari - + Correu electrònic - + Proveïdor - + Contrasenya - + Estat - + Confirmar contrasenya - + Nom per visualitzar - + S'ha eliminat el permís correctament! - + S'ha afegit el permís correctament! - + Establir permisos - + Seleccioneu Superior - + Nom superior - - Reset Password - - + Correu electrònic/Número de telèfon - + Rols assignats + + Reset Password + \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.de-DE.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.de-DE.resx index 6314fd43e..2ed7f80b7 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.de-DE.resx @@ -1,234 +1,237 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0} Sitzung geändert. - + Rollen zuweisen - + Klicken Sie auf Foto hochladen. - + Neues Passwort bestätigen - + Passwort bestätigen ist erforderlich! - + Neuen Benutzer anlegen - + Bearbeiten Sie den Benutzer - + E-Mail - + Ist aktiv - + Status sperren - + Neues Passwort - + Passwort ist erforderlich! - + Telefon-Nummer - + Passwort erfolgreich zurücksetzen - - Passwort zurücksetzen - - + Suche nach Benutzernamen - + Aktiv setzen - + Inaktiv setzen - + Passwort festlegen - + Website - + Name des Benutzers - + Benutzer - + Tentan auswählen - + Tenant Name - + Anbieter - + Vorgesetzter Name - + Wählen Sie Superior - + Email - + Passwort - + Status - + Passwort bestätigen - + Anzeigename - + Berechtigungen festlegen - - Passwort zurücksetzen - - + Zugewiesene Rollen - + E-Mail / Telefonnummer - + Berechtigung erfolgreich entfernt! - + Berechtigung erfolgreich hinzugefügt! + + Passwort zurücksetzen + \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.en.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.en.resx index 70340e781..5849962b2 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.en.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.en.resx @@ -1,234 +1,237 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0} session changed. - + Assign Roles - + Click upload a photo. - + Confirm New Password - + confirm password is required! - + Create a new user - + Edit the user - + Email - + Is Active - + Lock Status - + New Password - + password is required! - + Phone Number - + Reset password successfully - - Reset Password - - + Search for user name - + Set Active - + Set Inactive - + Set Password - + Site - + User Name - + Users - + Select Tentan - + Tenant Name - + Provider - + Superior Name - + Select Superior - + E-mail - + Password - + Status - + Confirm Password - + Display Name - + Set Permissions - - Reset Password - - + Assigned Roles - + Email / PhoneNumber - + Permission removed successfully! - + Permission added successfully! + + Reset Password + \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.es-ES.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.es-ES.resx index fc8a532b6..ccfecaac6 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.es-ES.resx @@ -1,234 +1,237 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0} sesión cambiada. - + Asignar funciones - + Haga clic en subir una foto. - + Confirmar nueva contraseña - + es necesario confirmar la contraseña - + Crear un nuevo usuario - + Editar el usuario - + Correo electrónico - + Está activo - + Estado de bloqueo - + Nueva contraseña - + ¡se requiere la contraseña! - + Número de teléfono - + Restablecer la contraseña con éxito - - Descansar la contraseña - - + Buscar el nombre del usuario - + Establecer activo - + Establecer Inactivo - + Establecer contraseña - + Sitio - + Nombre del usuario - + Usuarios - + Seleccione Tentan - + Nombre del inquilino - + Proveedor - + Nombre superior - + Seleccione superior - + Correo electrónico - + Clave - + Estado - + Confirmar contraseña - + Nombre para mostrar - + Establecer permisos - - Restablecer la contraseña - - + Roles asignados - + Correo electrónico / Número de teléfono - + ¡Permiso eliminado con éxito! - + ¡Permiso agregado exitosamente! + + Restablecer la contraseña + \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.fr-FR.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.fr-FR.resx index 6d8fa5946..3c905fea8 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.fr-FR.resx @@ -1,234 +1,237 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0} la session a changé. - + Attribuer des rôles - + Cliquez sur télécharger une photo. - + Confirmer le nouveau mot de passe - + Confirmer le mot de passe est nécessaire ! - + Créer un nouvel utilisateur - + Modifier l'utilisateur - + Email - + Est actif - + Statut de verrouillage - + Nouveau mot de passe - + Le mot de passe est obligatoire ! - + Numéro de téléphone - + Réinitialiser le mot de passe avec succès - - Restaurer le mot de passe - - + Recherche du nom de l'utilisateur - + Actif - + Définir inactif - + Définir le mot de passe - + Site - + Nom de l'utilisateur - + Utilisateurs - + Sélectionnez Tentan - + Tenant Name - + Fournisseur - + Nom supérieur - + Sélectionnez Supérieur - + E-mail - + Mot de passe - + Statut - + Confirmez le mot de passe - + Afficher un nom - + Définir les autorisations - - réinitialiser le mot de passe - - + Rôles attribués - + E-mail / Numéro de téléphone - + Autorisation supprimée avec succès ! - + Autorisation ajoutée avec succès ! + + réinitialiser le mot de passe + \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.ja-JP.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.ja-JP.resx index fcb5d0b83..a0a73ade0 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.ja-JP.resx @@ -1,234 +1,237 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0}セッションが変更されました。 - + ロールの割り当て - + 写真をアップロードするをクリックしてください。 - + 新しいパスワードの確認 - + パスワードの確認が必要です - + 新しいユーザーを作成する - + ユーザーを編集する - + 電子メール - + アクティブ - + ロック状況 - + 新規パスワード - + パスワードが必要です - + 電話番号 - + パスワードの再設定に成功しました。 - - パスワードの再入力 - - + ユーザー名で検索 - + アクティブに設定する - + 非アクティブに設定 - + パスワードの設定 - + サイト - + ユーザー名 - + ユーザー一覧 - + テンタンの選択 - + テナント名 - + プロバイダー - + 上司の名前 - + スーペリアを選択 - + Eメール - + パスワード - + 状態 - + パスワードを認証する - + 表示名 - + 権限を設定する - - パスワードを再設定する - - + 割り当てられた役割 - + メール/電話番号 - + 権限が正常に削除されました。 - + 権限が正常に追加されました。 + + パスワードを再設定する + \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.km-KH.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.km-KH.resx index 2f880aa20..61b8f47c8 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.km-KH.resx @@ -1,234 +1,237 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0} 세션이 변경되었습니다. - + 역할 할당 - + 사진 업로드를 클릭합니다. - + 새 암호를 확인합니다 - + 비밀번호 확인이 필요합니다! - + 새 사용자 만들기 - + 사용자 편집 - + 이메일 - + 활성 - + 잠금 상태 - + 새 비밀번호 - + 비밀번호가 필요합니다! - + 전화 번호 - + 비밀번호 재설정 성공 - - 나머지 비밀번호 - - + 사용자 이름 검색 - + 활성으로 설정 - + 비활성화 설정 - + 암호를 설정하세요 - + 대지 - + 사용자 이름 - + 사용자 - + ជ្រើស អ្នក ជួល - + 세입자 이름 - + 공급자 - + 상위 이름 - + 슈페리어 선택 - + 이메일 - + 비밀번호 - + 상태 - + 비밀번호 확인 - + 이름 표시하기 - + 권한 설정 - - 암호를 재설정 - - + 할당된 역할 - + 이메일/전화번호 - + 권한이 성공적으로 제거되었습니다! - + 권한이 성공적으로 추가되었습니다! + + 암호를 재설정 + \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.resx index 05eafc47f..73d9e7348 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.resx @@ -1,234 +1,237 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Assign Roles - + Click upload a photo. - + Confirm New Password - + confirm password is required! - + Create a new user - + Edit the user - + Email - + Is Active - + Lock Status - + New Password - + password is required! - + Phone Number - + Reset password successfully - - Reset Password - - + Search for user name - + Select Tenant - + Set Active - + Set Inactive - + Set Password - + Site - + Tenant Name - + User Name - + Users - + {0} session changed. - + Superior Name - + Provider - + Select Superior - + E-mail - + Password - + Status - + Confirm Password - + Display Name - + Set Permissions - - Reset Password - - + Assigned Roles - + Email / PhoneNumber - + Permission added successfully! - + Permission removed successfully! + + Reset Password + \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.ru.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.ru.resx index 84603943b..da686c0c3 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.ru.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.ru.resx @@ -1,234 +1,237 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0} сессия изменена. - + Назначение ролей - + Нажмите загрузить фотографию. - + Подтверждение нового пароля - + подтверждение пароля обязательно! - + Создать нового пользователя - + Редактировать пользователя - + Email - + Активен - + Статус блокировки - + Новый пароль - + пароль обязателен! - + Номер телефона - + Пароль успешно восстановлен - - Восстановить пароль - - + Поиск имени пользователя - + Установить активный - + Установить неактивный - + Установить пароль - + Сайт - + Имя пользователя - + Пользователи - + Выберите Тентан - + Имя арендатора - + Провайдер - + Высшее имя - + Выберите улучшенный - + Эл. почта - + Пароль - + Статус - + Подтвердить Пароль - + Показать имя - + Установить разрешения - - Сброс пароля - - + Назначенные роли - + Электронная почта / номер телефона - + Разрешение успешно удалено! - + Разрешение успешно добавлено! + + Сброс пароля + \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.zh-CN.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.zh-CN.resx index 1b937e975..77711514c 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.zh-CN.resx @@ -1,234 +1,237 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0} 会话更新 - + 分配角色 - + 颜色 - + 确认新密码 - + 确认密码必填 - + 创建新用户 - + 编辑用户 - + 电子邮件 - + 是否激活 - + 锁状态 - + 电话号码 - + 重置密码成功 - - 重置密码 - - + 搜索 - + 激活 - + 暂停 - + 设置密码 - + 站点 - + 用户名 - + 系统账号 - + 新密码 - + 密码必填 - + 选择租户 - + 租户名称 - + 来源 - + 上级 - + 选择上级 - + 电子邮件 - + 登录密码 - + 状态 - + 确认密码 - + 显示名称 - + 设置权限 - - 重置密码 - - + 分配角色 - + 电子邮件 / 电话 - + 权限删除成功 - + 授权成功 + + 重置密码 + \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.ar-IQ.resx b/src/Server.UI/Resources/Pages/Products/Products.ar-IQ.resx index ae7765c72..1410af5e7 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.ar-IQ.resx @@ -1,171 +1,177 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + اسم العلامة التجارية - + وصف - + ثمن - + حاصل الضرب - + اسم المنتج - + صور المنتج - + منتجات - + البحث عن العلامة التجارية - + البحث عن الحد الأقصى للسعر - + البحث عن الحد الأدنى للسعر - + البحث عن اسم المنتج - + البحث عن وحدة - + الحجم الموصى به لتحميل الصور هو 640X320 - + وحدة - + تحميل الصورة - + محو الصورة - + هل أنت متأكد أنك تريد محو هذه الصورة؟ \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.ca-ES.resx b/src/Server.UI/Resources/Pages/Products/Products.ca-ES.resx index 3863d82b1..cc5800517 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.ca-ES.resx @@ -1,171 +1,177 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Marca - + Preu - + Nom del producte - + Productes - + Unitat - + Descripció - + Producte - + Fotos del producte - + Buscar per marca - + Buscar per preu màxim - + Buscar el preu mínim - + Buscar el nom del producte - + Buscar l'unitat - + El tamany recomenat par a pujar imàtges és 640X320 - + Esteu segur que voleu esborrar aquesta imatge? - + Esborra la imatge - + Carrega la imatge \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.de-DE.resx b/src/Server.UI/Resources/Pages/Products/Products.de-DE.resx index fb5cd034c..64067063a 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.de-DE.resx @@ -1,171 +1,177 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Markenname - + Preis - + Name des Produkts - + Produkte - + Einheit - + Suche nach Marke - + Suche nach Höchstpreis - + Suche nach Mindestpreis - + Suche nach Produktname - + Suche nach Einheit - + Beschreibung - + Produkt - + Produkt-Bilder - + Die empfohlene Größe für das Hochladen von Bildern ist 640X320 - + Bild hochladen - + Bild löschen - + Möchten Sie dieses Bild wirklich löschen? \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.en.resx b/src/Server.UI/Resources/Pages/Products/Products.en.resx index 6cd03b2fc..18295f691 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.en.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.en.resx @@ -1,171 +1,177 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Brand Name - + Price - + Product Name - + Products - + Unit - + Search for product name - + Search for unit - + Search for minimum price - + Search for maximum price - + Search for brand - + Description - + Product - + Product Pictures - + The recommended size for uploading images is 640X320 - + Are you sure you want to erase this image? - + Upload picture - + Erase image \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.es-ES.resx b/src/Server.UI/Resources/Pages/Products/Products.es-ES.resx index c8e5fd296..bb4b55a57 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.es-ES.resx @@ -1,171 +1,177 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Marca - + Precio - + Nombre del producto - + Productos - + Unidad - + Descripción - + Producto - + Fotos del producto - + Buscar por marca - + Buscar por precio máximo - + Buscar el precio mínimo - + Buscar el nombre del producto - + Buscar la unidad - + El tamaño recomendado para subir imágenes es 640X320 - + ¿Seguro que quieres borrar esta imagen? - + Borrar imagen - + Subir foto \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.fr-FR.resx b/src/Server.UI/Resources/Pages/Products/Products.fr-FR.resx index 26272ba2c..a321a52a1 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.fr-FR.resx @@ -1,171 +1,177 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nom de la marque - + Prix - + Nom du produit - + Produits - + Unité - + Description - + Produit - + Images du produit - + Rechercher une marque - + Recherche du prix maximum - + Recherche du prix minimum - + Recherche du nom du produit - + Recherche de l'unité - + La taille recommandée pour le téléchargement d'images est de 640X320. - + Charger une photo - + Effacer l'image - + Voulez-vous vraiment effacer cette image ? \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.ja-JP.resx b/src/Server.UI/Resources/Pages/Products/Products.ja-JP.resx index 9b7c035e6..ae22339fd 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.ja-JP.resx @@ -1,171 +1,177 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + ブランド名 - + 価格 - + 製品名 - + 製品情報 - + 単位 - + 商品説明 - + 商品名 - + 製品写真 - + ブランド検索 - + 最高価格検索 - + 最低価格検索 - + 製品名を検索 - + 単位を検索する - + 画像のアップロードは640X320サイズを推奨します。 - + 写真をアップロードする - + 画像を消去する - + この画像を消去してもよろしいですか? \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.km-KH.resx b/src/Server.UI/Resources/Pages/Products/Products.km-KH.resx index 176020557..6cd897dd3 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.km-KH.resx @@ -1,171 +1,177 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 상표명 - + 가격 - + 상품명 - + 제품 - + 단위 - + 브랜드 검색 - + 최고가 검색 - + 최저가 검색 - + 제품명 검색 - + 단위 검색 - + 설명 - + 제품 - + 제품 사진 - + 이미지 업로드 권장 크기는 640X320입니다. - + 사진 업로드 - + 이미지 지우기 - + 이 이미지를 지우시겠습니까? \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.resx b/src/Server.UI/Resources/Pages/Products/Products.resx index fcc1bdd8b..353c50b05 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.resx @@ -1,171 +1,177 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Are you sure you want to erase this image? - + Brand Name - + Description - + Erase image - + Price - + Product - + Product Name - + Product Pictures - + Products - + Search for brand - + Search for maximum price - + Search for minimum price - + Search for product name - + Search for unit - + The recommended size for uploading images is 640X320 - + Unit - + Upload picture \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.ru.resx b/src/Server.UI/Resources/Pages/Products/Products.ru.resx index ee99a8cd5..4c444c076 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.ru.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.ru.resx @@ -1,171 +1,177 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Название бренда - + Цена - + Название продукта - + Продукты - + Единица - + Поиск максимальной цены - + Поиск бренда - + Поиск минимальной цены - + Поиск названия продукта - + Поиск единицы измерения - + Описание - + Продукт - + Изображения продукта - + Рекомендуемый размер загружаемых изображений - 640X320 - + Загрузить изображение - + Удалить изображение - + Вы уверены, что хотите стереть это изображение? \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.zh-CN.resx b/src/Server.UI/Resources/Pages/Products/Products.zh-CN.resx index 8e325ff0c..d22448fbd 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.zh-CN.resx @@ -1,171 +1,177 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 品牌 - + 单价 - + 产品名称 - + 产品信息 - + 单位 - + 按品牌搜索 - + 最大单价 - + 最低单价 - + 按品名搜索 - + 按单位搜索 - + 产品 - + 描述 - + 产品图片 - + 建议上传的图片尺寸:640x320 - + 上传图片 - + 你确定要删除图片吗? - + 删除图片 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ar-IQ.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ar-IQ.resx index 476bd24b5..fd4fc1492 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ar-IQ.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + مسارات التدقيق - + نوع التدقيق - + التاريخ والوقت - + إخفاء التفاصيل - + المفتاح الأساسي - + اظهار التفاصيل - + اسم الجدول - + معرف المستخدم \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ca-ES.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ca-ES.resx index 3ef6062f8..b7d49ffe7 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ca-ES.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Registres d'auditoria - + Tipus d'auditoria - + Data Hora - + Amagar detalls - + Clau principal - + Mostrar detalls - + Nom de la taula - + Id. d'usuari \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.de-DE.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.de-DE.resx index ded189f47..4eacd61b0 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.de-DE.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.de-DE.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Audit Trails - + Audit-Typ - + Datum Uhrzeit - + Details verbergen - + Primärer Schlüssel - + Details anzeigen - + Name der Tabelle - + Benutzer-ID \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.en.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.en.resx index 58fcb292e..97ff484a3 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.en.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.en.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Audit Trails - + Audit Type - + Created DateTime - + Hide Details - + Primary Key - + Show Details - + Table Name - + User Id \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.es-ES.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.es-ES.resx index 36897b11d..62a05dbc9 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.es-ES.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.es-ES.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Registros de auditoría - + Tipo de auditoría - + Fecha Hora - + Ocultar detalles - + Clave principal - + Mostrar detalles - + Nombre de la mesa - + Id. de usuario \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.fr-FR.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.fr-FR.resx index 94d264742..b27091ce3 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.fr-FR.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Pistes d'audit - + Type d'audit - + Date Heure - + Cacher les détails - + Clé primaire - + Afficher les détails - + Nom de la table - + Id utilisateur \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ja-JP.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ja-JP.resx index fe261197d..1aa7b0426 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ja-JP.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 監査証跡 - + 監査タイプ - + 日付 時間 - + 詳細を隠す - + 主キー - + 詳細を表示する - + テーブル名 - + ユーザーID \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.km-KH.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.km-KH.resx index 945cbd463..fbe47bad9 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.km-KH.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.km-KH.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 감사 추적 - + 감사 유형 - + 날짜 시간 - + 세부 정보 숨기기 - + 기본 키 - + 세부 정보 표시 - + 테이블 이름 - + 사용자 ID \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.resx index ee7870a6f..62794cd85 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.resx @@ -1,144 +1,150 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Audit Trails - + Audit Type - + Created DateTime - + Hide Details - + Primary Key - + Show Details - + Table Name - + User Id \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ru.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ru.resx index dbd8e4834..dc255fd99 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ru.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ru.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Следы аудита - + Тип аудита - + Дата Время - + Скрыть подробности - + Основной ключ - + Показать подробности - + Имя таблицы - + Id пользователя \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.zh-CN.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.zh-CN.resx index b067d2d35..d4c2f2eb4 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.zh-CN.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 安全审计 - + 变更类型 - + 创建时间 - + 隐藏明细 - + 主键 - + 显示明细 - + 表名 - + 用户编号 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ar-IQ.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ar-IQ.resx index e1d0fdd64..899c9c21a 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ar-IQ.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + تنفيذ التعديل - + وصف - + قائمة الانتقاء - + اسم - + قائمة الانتقاء - + البحث عن اسم الدور - + نص - + قيمة \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ca-ES.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ca-ES.resx index 4fb101ae4..c91d0e216 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ca-ES.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Confirmar Edició - + Descripció - + Llista de selecció - + Nom - + Llista de selecció - + Buscar el nom de la funció - + Tex - + Valor \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.de-DE.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.de-DE.resx index 792a46278..7bfe4c4d8 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.de-DE.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.de-DE.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Bestätigen Bearbeiten - + Beschreibung - + Auswahlliste - + Name - + Auswahlliste - + Suche nach Rollenname - + Text - + Wert \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.en.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.en.resx index a0ccbf6e9..02423ec86 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.en.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.en.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Commit Edit - + Description - + Picklist - + Name - + Picklist - + Search for role name - + Text - + Value \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.es-ES.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.es-ES.resx index 3c5441845..66100984a 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.es-ES.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.es-ES.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Confirmar Edición - + Descripción - + Lista de selección - + Nombre - + Lista de selección - + Buscar el nombre de la función - + Texto - + Valor \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.fr-FR.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.fr-FR.resx index f3442f59a..9a8587ee4 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.fr-FR.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Commit Edit - + Description - + Liste de sélection - + Nom - + Liste de sélection - + Recherche d'un nom de rôle - + Texte - + Valeur \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ja-JP.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ja-JP.resx index c476e16a7..29eb92223 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ja-JP.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 編集をコミットする - + 商品説明 - + ピックリスト - + 名前 - + ピックリスト - + ロール名を検索 - + テキスト - + \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.km-KH.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.km-KH.resx index a6e5eb71b..35062ce1d 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.km-KH.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.km-KH.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 커밋 편집 - + 설명 - + 선택 목록 - + 이름 - + 선택 목록 - + 역할 이름 검색 - + 텍스트 - + \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.resx index 611f75963..a60406c71 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.resx @@ -1,144 +1,150 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Commit Edit - + Description - + Picklist - + Name - + Picklist - + Search for role name - + Text - + Value \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ru.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ru.resx index ee3bc04e5..682b60e9e 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ru.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ru.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Принять решение Редактировать - + Описание - + Пиклист - + Имя - + Picklist - + Поиск имени роли - + Текст - + Значение \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.zh-CN.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.zh-CN.resx index 9aa0f425a..b2916a056 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.zh-CN.resx @@ -1,144 +1,150 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 提交编辑 - + 描述 - + 参数选用表 - + 参数名 - + 参数选用表 - + 搜索关键字 - + 文本 - + 文本的值 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.ar-IQ.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.ar-IQ.resx index 4daa676f4..9eb383b78 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.ar-IQ.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + إخفاء التفاصيل - + مستوى - + سجلات - + رسالة - + اظهار التفاصيل - + الطابع الزمني - + اسم المستخدم \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.ca-ES.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.ca-ES.resx index 288d3a66a..d54a5b705 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.ca-ES.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Amagar detalls - + Nivell - + Registres - + Missatge - + Mostrar detalls - + Segell de temps - + Nom d'usuari \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.de-DE.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.de-DE.resx index 75cf00443..099dc889a 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.de-DE.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.de-DE.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Details verbergen - + Ebene - + Logs - + Meldung - + Details anzeigen - + Zeitstempel - + Name des Benutzers \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.en.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.en.resx index 781ec4bd0..bec28aaef 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.en.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.en.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Hide Details - + Level - + Logs - + Message - + Show Details - + Time Stamp - + User Name \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.es-ES.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.es-ES.resx index f0bae838c..c1bf6d657 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.es-ES.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.es-ES.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Ocultar detalles - + Nivel - + Registros - + Mensaje - + Mostrar detalles - + Sello de tiempo - + Nombre de usuario \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.fr-FR.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.fr-FR.resx index 6019a3a9d..8b805fa15 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.fr-FR.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Cacher les détails - + Niveau - + Logs - + Message - + Afficher les détails - + Horodatage - + Nom de l'utilisateur \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.ja-JP.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.ja-JP.resx index 6831545d4..2dc811ec1 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.ja-JP.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 詳細を隠す - + レベル - + ログ - + メッセージ - + 詳細を表示する - + タイムスタンプ - + ユーザー名 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.km-KH.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.km-KH.resx index 8ac6c9721..ed05e816d 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.km-KH.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.km-KH.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 세부 정보 숨기기 - + 수준 - + 로그 - + 메시지 - + 세부 정보 표시 - + 타임 스탬프 - + 사용자 이름 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.resx index bdba8e0ac..2f14e8bbd 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.resx @@ -1,141 +1,147 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Hide Details - + Level - + Logs - + Message - + Show Details - + Time Stamp - + User Name \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.ru.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.ru.resx index d5d5fd99c..859cd85c1 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.ru.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.ru.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Скрыть информацию - + Уровень - + Журналы - + Сообщение - + Показать детали - + Штамп времени - + Имя пользователя \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.zh-CN.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.zh-CN.resx index de36b0726..09212a7e7 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.zh-CN.resx @@ -1,141 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 隐藏明细 - + 等级 - + 日志 - + 消息 - + 显示明细 - + 时间 - + 用户名 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.ar-IQ.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.ar-IQ.resx index 4eb112b42..a42b10d08 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.ar-IQ.resx @@ -1,147 +1,153 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + إنشاء مستأجر جديد - + تحرير المستأجر - + متعدد المستأجرين - + مستاجر - + معرف المستأجر - + مطلوب معرف المستأجر! - + اسم المستأجر - + اسم المستأجر مطلوب! - + المستاجرين \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.ca-ES.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.ca-ES.resx index bb03de393..525441f70 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.ca-ES.resx @@ -1,147 +1,153 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Crear un nou Arrendatari - + Editar l'Arrendatari - + Multi-Arrendatari - + Arrendatar - + Id. del Arrendatari - + L'identificación de l'Arrendatari és obligatoria. - + Nom de l'Arrendatari - + El nombr de l'Arrendatari és obligatori. - + Arrendataris \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.de-DE.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.de-DE.resx index 4fbb6f5c7..fc6561e47 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.de-DE.resx @@ -1,147 +1,153 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Neuen Mieter anlegen - + Bearbeiten Sie den Mieter - + Multi-Mandanten - + Mieter - + Mieter-ID - + Die Mieterkennung ist erforderlich! - + Mieter Name - + Der Name des Mieters ist erforderlich! - + Mieter \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.en.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.en.resx index c6e595808..59f6f75d5 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.en.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.en.resx @@ -1,147 +1,153 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Create a new Tenant - + Edit the Tenant - + Multi-Tenant - + Tenant - + Tenant Id - + Tenant id is required! - + Tenant Name - + Tenant name is required! - + Tenants \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.es-ES.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.es-ES.resx index c40643271..6a74d5605 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.es-ES.resx @@ -1,147 +1,153 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Crear un nuevo Arrendatario - + Editar el inquilino - + Multi-Tenant - + Arrendatario - + Id. del inquilino - + La identificación del inquilino es obligatoria. - + Nombre del arrendatario - + El nombre del inquilino es obligatorio. - + Arrendatarios \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.fr-FR.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.fr-FR.resx index 0547e2a82..998def631 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.fr-FR.resx @@ -1,147 +1,153 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Créer un nouveau locataire - + Modifier le locataire - + Multi-locataire - + Locataire - + Id du locataire - + L'identifiant du locataire est obligatoire ! - + Nom du locataire - + Le nom du locataire est obligatoire ! - + Locataires \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.ja-JP.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.ja-JP.resx index e87426642..daf58a45c 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.ja-JP.resx @@ -1,147 +1,153 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + テナントの新規作成 - + テナントの編集 - + マルチテナント - + テナント - + テナントID - + テナントIDは必須です - + テナント名 - + テナント名は必須です - + テナント名 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.km-KH.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.km-KH.resx index 8ca39cb77..834fd33c6 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.km-KH.resx @@ -1,147 +1,153 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 새 테넌트 만들기 - + 테넌트 편집 - + 멀티 테넌트 - + 거주자 - + 임차인 아이디 - + 임차인 아이디가 필요합니다! - + 세입자 이름 - + 임차인 이름은 필수 항목입니다! - + 세입자 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.resx index 5615488f6..7e664d9d7 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.resx @@ -1,147 +1,153 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Create a new Tenant - + Edit the Tenant - + Multi-Tenant - + Tenant - + Tenant Id - + Tenant id is required! - + Tenant Name - + Tenant name is required! - + Tenants \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.ru.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.ru.resx index d43c4521e..4cf49d45c 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.ru.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.ru.resx @@ -1,147 +1,153 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Создать нового арендатора - + Редактировать арендатора - + Многопользовательский - + Арендатор - + Идентификатор арендатора - + Идентификатор арендатора обязателен! - + Имя арендатора - + Имя арендатора обязательно! - + Арендаторы \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.zh-CN.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.zh-CN.resx index 2e9b7869b..91d39a682 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.zh-CN.resx @@ -1,147 +1,153 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 创建新租户 - + 编辑租户 - + 多租户 - + 租户 - + 租户编号 - + 租户编号必填 - + 租户名称 - + 租户名称必填 - + 租户 \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.ar-IQ.resx b/src/Server.UI/Resources/Shared/SharedResource.ar-IQ.resx index c34fcf0d7..57ea8c7d0 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.ar-IQ.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.ar-IQ.resx @@ -1,198 +1,205 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + المصادقة مطلوبة، انقر على - + المصادقة مطلوبة، انقر على تسجيل الدخول. - + إلغاء الأمر - + لون - + أكد - + حذف التأكيد - + عد للمنزل - + تسجيل الخروج - + الخروج - + تأكيد تسجيل الخروج - + وضع علامة كمقروءة - + طريقة - + لا شيء جديد :( - + الاخطارات - + ملف تعريف - + بحث... - + اعدادات - + تسجيل الدخول - + عذرا، لا يوجد شيء في هذا العنوان. - + المواضيع - + تحاول تسجيل الخروج من التطبيق. هل تريد حقا تسجيل الخروج؟ - + أنت غير مصرح لك بالتواجد هنا. لمزيد من المعلومات، اتصل بمسؤول النظام. - + قام {0} بتسجيل الخروج. - + قام {0} بتسجيل الدخول. - + ملف تعريفي للمستخدم - + إشعار \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.ca-ES.resx b/src/Server.UI/Resources/Shared/SharedResource.ca-ES.resx index ace75cdac..a11603ea8 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.ca-ES.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.ca-ES.resx @@ -1,198 +1,205 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + l'autenticació és necessària, feu clic a Iniciar sessió. - + Cancel·lar - + Color - + Confirmar - + Suprimeix la confirmació - + Anar a la pàgina d'inici - + Desconnectat - + Tancar sessió - + Confirmació de tancament de sessió - + Marcar com lleguit - + Mode - + Res nou :( - + Notificacions - + Perfil - + Buscar... - + Configuració - + Ho sentim, no hi ha res en aquesta adreça. - + Temes - + Esteu provant de tancar la sessió de l'aplicació. Realment voleu tancar la sessió? - + No estàs autoritzat per estar aquí. Per obtenir més informació, poseu-vos en contacte amb l'administrador del vostre sistema. - + l'autenticació és necessària, feu clic - + Iniciar sessió - + {0} ha tancat la sessió. - + {0} ha iniciat sessió. - + Perfil d'usuari - + Notificació \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.de-DE.resx b/src/Server.UI/Resources/Shared/SharedResource.de-DE.resx index cdd780147..2a3906386 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.de-DE.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.de-DE.resx @@ -1,198 +1,205 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + eine Authentifizierung erforderlich ist, klicken Sie auf "Anmelden". - + Abbrechen - + Farbe - + Bestätigen Sie - + Löschen-Bestätigung - + Nach Hause gehen - + Abgemeldet - + Abmeldung - + Abmelde-Bestätigung - + Als gelesen markieren - + Modus - + Nichts Neues :( - + Benachrichtigungen - + Profil - + Suchen... - + Einstellungen - + Sorry, unter dieser Adresse gibt es nichts. - + Themen - + Sie versuchen, sich von der Anwendung abzumelden. Möchten Sie sich wirklich abmelden? - + Sie sind nicht berechtigt, hier zu sein. Für weitere Informationen wenden Sie sich bitte an Ihren Systemadministrator. - + eine Authentifizierung erforderlich ist, klicken Sie auf - + sign in - + {0} hat sich abgemeldet. - + {0} hat sich angemeldet. - + Benutzerprofil - + Benachrichtigung \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.en.resx b/src/Server.UI/Resources/Shared/SharedResource.en.resx index 059b998e0..53c36018a 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.en.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.en.resx @@ -1,198 +1,205 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + authentication is required, click sign in. - + Cancel - + Color - + Confirm - + Delete Confirmation - + Go Home - + Logged out - + Logout - + Logout Confirmation - + Mark as read - + Mode - + Nothing new :( - + Notifications - + Profile - + Search... - + Settings - + Sorry, there's nothing at this address. - + Themes - + You are attempting to log out of application. Do you really want to log out? - + You are not authorized to be here. For more information, contact your system administrator. - + authentication is required, click - + sign in - + User Profile - + Notification - + {0} has logged out. - + {0} has logged in. \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.es-ES.resx b/src/Server.UI/Resources/Shared/SharedResource.es-ES.resx index 65450c15d..8b5d74153 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.es-ES.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.es-ES.resx @@ -1,198 +1,205 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + se requiere autenticación, haga clic en iniciar sesión. - + Cancelar - + Color - + Confirmar - + Confirmación de eliminación - + Ir a la página de inicio - + Cerrar la sesión - + Cierre de sesión - + Confirmación de cierre de sesión - + Marcar como leído - + Modo - + Nada nuevo :( - + Notificaciones - + Perfil - + Buscar... - + Configuración - + Lo sentimos, no hay nada en esta dirección. - + Temas - + Está intentando cerrar la sesión de la aplicación. ¿Realmente quiere cerrar la sesión? - + No está autorizado a estar aquí. Para más información, póngase en contacto con el administrador del sistema. - + se requiere autenticación, haga clic en - + sign in - + {0} se ha desconectado. - + {0} ha iniciado sesión. - + Perfil del usuario - + Notificación \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.fr-FR.resx b/src/Server.UI/Resources/Shared/SharedResource.fr-FR.resx index 925b65b19..529a0d3a0 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.fr-FR.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.fr-FR.resx @@ -1,198 +1,205 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Une authentification est requise, cliquez sur s'identifier. - + Annuler - + Couleur - + Confirmer - + Confirmation de suppression - + Aller à la page d'accueil - + Déconnecté - + Déconnexion - + Confirmation de la déconnexion - + Marquer comme lu - + Mode - + Rien de nouveau :( - + Notifications - + Profil - + Rechercher... - + Paramètres - + Désolé, il n'y a rien à cette adresse. - + Thèmes - + Vous tentez de vous déconnecter de l'application. Voulez-vous vraiment vous déconnecter ? - + Vous n'êtes pas autorisé à être ici. Pour plus d'informations, contactez votre administrateur système. - + Une authentification est requise, cliquez sur - + sign in - + {0} s'est déconnecté. - + {0} s'est connecté. - + Profil de l'utilisateur - + Notification \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.ja-JP.resx b/src/Server.UI/Resources/Shared/SharedResource.ja-JP.resx index 24fb1e5bd..6339204c2 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.ja-JP.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.ja-JP.resx @@ -1,198 +1,205 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 認証が必要な場合は、サインインをクリックしてください。 - + キャンセル - + カラー - + 確認 - + 削除確認 - + ホームへ戻る - + ログアウト - + ログアウト - + ログアウトの確認 - + 既読にする - + モード - + 新しいものはありません :( - + お知らせ - + プロフィール - + 検索... - + 設定項目 - + このアドレスには何もありません。 - + テーマ - + アプリケーションからログアウトしようとしています。本当にログアウトしますか? - + あなたはここにいる権限がありません。詳細については、システム管理者にお問い合わせください。 - + 認証が必要な場合は、サインインをクリックしてください。 - + sign in - + {0} がログアウトしました。 - + {0} がログインしました。 - + ユーザープロフィール - + 通知 \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.km-KH.resx b/src/Server.UI/Resources/Shared/SharedResource.km-KH.resx index 1e3c4b94f..6f2d8233d 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.km-KH.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.km-KH.resx @@ -1,198 +1,205 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 인증이 필요합니다. 로그인을 클릭하세요. - + 취소 - + 색깔 - + 확인하다 - + 삭제 확인 - + 집에가 - + 로그아웃 - + 로그 아웃 - + 로그아웃 확인 - + 읽은 상태로 표시 - + 방법 - + 새로운 것은 없다 :( - + 알림 - + 프로필 - + 검색... - + 설정 - + 죄송합니다. 이 주소에는 아무것도 없습니다. - + 테마 - + 애플리케이션에서 로그아웃을 시도하고 있습니다. 정말 로그아웃하시겠습니까? - + 당신은 여기에 올 권한이 없습니다. 자세한 내용은 시스템 관리자에게 문의하십시오. - + 인증이 필요합니다. 로그인을 클릭하세요. - + sign in - + {0}님이 로그아웃했습니다. - + {0}님이 로그인했습니다. - + 유저 프로필 - + 공고 \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.resx b/src/Server.UI/Resources/Shared/SharedResource.resx index 257db2415..f8c09ae24 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.resx @@ -1,198 +1,205 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + authentication is required, click - + authentication is required, click sign in. - + Cancel - + Color - + Confirm - + Delete Confirmation - + Go Home - + Logged out - + Logout - + Logout Confirmation - + Mark as read - + Mode - + Nothing new :( - + Notifications - + Profile - + Search... - + Settings - + sign in - + Sorry, there's nothing at this address. - + Themes - + You are attempting to log out of application. Do you really want to log out? - + You are not authorized to be here. For more information, contact your system administrator. - + Notification - + User Profile - + {0} has logged in. - + {0} has logged out. \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.ru.resx b/src/Server.UI/Resources/Shared/SharedResource.ru.resx index 533512f3b..c456c47ee 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.ru.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.ru.resx @@ -1,198 +1,205 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + требуется аутентификация, нажмите войти. - + Отменить - + Цвет - + Подтвердить - + Подтверждение удаления - + Перейти на главную страницу - + Вышел из системы - + Выход - + Подтверждение выхода из системы - + Пометить как прочитанное - + Режим - + Ничего нового :( - + Уведомления - + Профиль - + Поиск... - + Настройки - + Извините, по этому адресу ничего нет. - + Темы - + Вы пытаетесь выйти из приложения. Вы действительно хотите выйти из приложения? - + Вы не авторизованы здесь. Для получения дополнительной информации обратитесь к своему системному администратору. - + требуется аутентификация, нажмите - + sign in - + {0} вышел из системы. - + {0} вошел в систему. - + Профиль пользователя - + Уведомление \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.zh-CN.resx b/src/Server.UI/Resources/Shared/SharedResource.zh-CN.resx index aa5acb969..8c14d6379 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.zh-CN.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.zh-CN.resx @@ -1,198 +1,205 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 需要登录后访问, 单击“登录”. - + 返回首页 - + 对不起, 没有这个地址. - + 你无权来这里。有关更多信息,请与系统管理员联系。 - + 注销 - + 简档 - + 设置 - + 取消 - + 确认 - + 删除确认 - + 已注销 - + 注销确认 - + 您正试图注销应用程序.您真的想退出吗? - + 颜色 - + 模式 - + 主题 - + 标记已读 - + 没有新消息 :( - + 通知 - + 搜索 - + 登录 - + 需要登录后访问, 单击 - + 新消息 - + 用户信息 - + {0} 已经注销. - + {0} 登录 \ No newline at end of file diff --git a/src/Server.UI/Server.UI.csproj b/src/Server.UI/Server.UI.csproj index 836706d42..369a33b42 100644 --- a/src/Server.UI/Server.UI.csproj +++ b/src/Server.UI/Server.UI.csproj @@ -19,7 +19,7 @@ - + diff --git a/src/Server.UI/Services/BlazorAuthenticationStateProvider.cs b/src/Server.UI/Services/BlazorAuthenticationStateProvider.cs index ad12eca58..4ac70df07 100644 --- a/src/Server.UI/Services/BlazorAuthenticationStateProvider.cs +++ b/src/Server.UI/Services/BlazorAuthenticationStateProvider.cs @@ -3,30 +3,32 @@ using Microsoft.AspNetCore.Components.Authorization; namespace CleanArchitecture.Blazor.Server.UI.Services; -public class BlazorAuthenticationStateProvider : AuthenticationStateProvider + +public class BlazorAuthenticationStateProvider : AuthenticationStateProvider { private readonly IAccessTokenProvider _tokenProvider; - public BlazorAuthenticationStateProvider(IAccessTokenProvider tokenProvider) + public BlazorAuthenticationStateProvider(IAccessTokenProvider tokenProvider) { _tokenProvider = tokenProvider; } public override async Task GetAuthenticationStateAsync() { - var claimsPrincipal =await _tokenProvider.GetClaimsPrincipal(); + var claimsPrincipal = await _tokenProvider.GetClaimsPrincipal(); return new AuthenticationState(claimsPrincipal); } + public void MarkUserAsAuthenticated(ClaimsPrincipal authenticatedUser) { var authState = Task.FromResult(new AuthenticationState(authenticatedUser)); NotifyAuthenticationStateChanged(authState); } + public void MarkUserAsLoggedOut() { var anonymousUser = new ClaimsPrincipal(new ClaimsIdentity()); var authState = Task.FromResult(new AuthenticationState(anonymousUser)); NotifyAuthenticationStateChanged(authState); } -} - +} \ No newline at end of file diff --git a/src/Server.UI/Services/JsInterop/Fancybox.cs b/src/Server.UI/Services/JsInterop/Fancybox.cs index 6d8f225ae..39d65c5bd 100644 --- a/src/Server.UI/Services/JsInterop/Fancybox.cs +++ b/src/Server.UI/Services/JsInterop/Fancybox.cs @@ -1,5 +1,4 @@ - -using Microsoft.JSInterop; +using Microsoft.JSInterop; namespace CleanArchitecture.Blazor.Server.UI.Services.JsInterop; @@ -11,9 +10,11 @@ public Fancybox(IJSRuntime jsRuntime) { _jsRuntime = jsRuntime; } + public async Task Preview(string defaultUrl, IEnumerable images) { var jsmodule = await _jsRuntime.InvokeAsync("import", "/js/fancybox.js"); - return jsmodule.InvokeVoidAsync(JSInteropConstants.PreviewImage, defaultUrl, images.Select(x => x.Url).ToArray()); + return jsmodule.InvokeVoidAsync(JSInteropConstants.PreviewImage, defaultUrl, + images.Select(x => x.Url).ToArray()); } -} +} \ No newline at end of file diff --git a/src/Server.UI/Services/JsInterop/InputClear.cs b/src/Server.UI/Services/JsInterop/InputClear.cs index 801426c0f..2c75aa089 100644 --- a/src/Server.UI/Services/JsInterop/InputClear.cs +++ b/src/Server.UI/Services/JsInterop/InputClear.cs @@ -2,8 +2,7 @@ namespace CleanArchitecture.Blazor.Server.UI.Services.JsInterop; - -public partial class InputClear +public class InputClear { private readonly IJSRuntime _jsRuntime; @@ -11,11 +10,10 @@ public InputClear(IJSRuntime jsRuntime) { _jsRuntime = jsRuntime; } + public async Task Clear(string targetId) { var jsmodule = await _jsRuntime.InvokeAsync("import", "/js/clearinput.js"); return jsmodule.InvokeVoidAsync(JSInteropConstants.ClearInput, targetId); } - - -} +} \ No newline at end of file diff --git a/src/Server.UI/Services/JsInterop/JSInteropConstants.cs b/src/Server.UI/Services/JsInterop/JSInteropConstants.cs index 5b7e8ecba..5838fb169 100644 --- a/src/Server.UI/Services/JsInterop/JSInteropConstants.cs +++ b/src/Server.UI/Services/JsInterop/JSInteropConstants.cs @@ -2,8 +2,8 @@ public class JSInteropConstants { - public static string ShowOpenSeadragon="showOpenSeadragon"; + public static string ShowOpenSeadragon = "showOpenSeadragon"; public static string ClearInput = "clearInput"; public static string PreviewImage = "previewImage"; public static string CreateOrgChart = "createOrgChart"; -} +} \ No newline at end of file diff --git a/src/Server.UI/Services/JsInterop/OpenSeadragon.cs b/src/Server.UI/Services/JsInterop/OpenSeadragon.cs index c1dc349c6..45fe637d7 100644 --- a/src/Server.UI/Services/JsInterop/OpenSeadragon.cs +++ b/src/Server.UI/Services/JsInterop/OpenSeadragon.cs @@ -2,7 +2,7 @@ namespace CleanArchitecture.Blazor.Server.UI.Services.JsInterop; -public partial class OpenSeadragon +public class OpenSeadragon { private readonly IJSRuntime _jsRuntime; @@ -10,12 +10,11 @@ public OpenSeadragon(IJSRuntime jsRuntime) { _jsRuntime = jsRuntime; } + public async Task Open(string url) { var target = "openseadragon"; var jsmodule = await _jsRuntime.InvokeAsync("import", "/js/openseadragon.js"); return jsmodule.InvokeVoidAsync(JSInteropConstants.ShowOpenSeadragon, target, url); } - - -} +} \ No newline at end of file diff --git a/src/Server.UI/Services/JsInterop/OrgChart.cs b/src/Server.UI/Services/JsInterop/OrgChart.cs index 503e38442..c49f7357b 100644 --- a/src/Server.UI/Services/JsInterop/OrgChart.cs +++ b/src/Server.UI/Services/JsInterop/OrgChart.cs @@ -3,7 +3,7 @@ namespace CleanArchitecture.Blazor.Server.UI.Services.JsInterop; -public partial class OrgChart +public class OrgChart { private readonly IJSRuntime _jsRuntime; @@ -11,9 +11,10 @@ public OrgChart(IJSRuntime jsRuntime) { _jsRuntime = jsRuntime; } + public async Task Create(List data) { var jsmodule = await _jsRuntime.InvokeAsync("import", "/js/orgchart.js"); return jsmodule.InvokeVoidAsync("createOrgChart", data); } -} +} \ No newline at end of file diff --git a/src/Server.UI/Services/Layout/LayoutService.cs b/src/Server.UI/Services/Layout/LayoutService.cs index 2772a41a3..d7784b2f6 100644 --- a/src/Server.UI/Services/Layout/LayoutService.cs +++ b/src/Server.UI/Services/Layout/LayoutService.cs @@ -6,17 +6,10 @@ namespace CleanArchitecture.Blazor.Server.UI.Services.Layout; public class LayoutService { - private bool _systemPreferences; private readonly IUserPreferencesService _userPreferencesService; - private UserPreferences.UserPreferences _userPreferences=new(); + private bool _systemPreferences; + private UserPreferences.UserPreferences _userPreferences = new(); public DarkLightMode DarkModeToggle = DarkLightMode.System; - public bool IsRTL { get; private set; } = false; - public bool IsDarkMode { get; private set; } = false; - public string PrimaryColor { get; set; } = "#2d4275"; - public string SecondaryColor { get; set; } = "#ff4081ff"; - public double BorderRadius { get; set; } = 4; - public double DefaultFontSize { get; set; } = 0.8125; - public MudTheme CurrentTheme { get; private set; } = new(); public LayoutService(IUserPreferencesService userPreferencesService) @@ -24,6 +17,14 @@ public LayoutService(IUserPreferencesService userPreferencesService) _userPreferencesService = userPreferencesService; } + public bool IsRTL { get; private set; } + public bool IsDarkMode { get; private set; } + public string PrimaryColor { get; set; } = "#2d4275"; + public string SecondaryColor { get; set; } = "#ff4081ff"; + public double BorderRadius { get; set; } = 4; + public double DefaultFontSize { get; set; } = 0.8125; + public MudTheme CurrentTheme { get; private set; } = new(); + public void SetDarkMode(bool value) { IsDarkMode = value; @@ -34,7 +35,7 @@ public void SetDarkMode(bool value) _userPreferences = await _userPreferencesService.LoadUserPreferences(); if (_userPreferences != null) { - IsDarkMode = _userPreferences.DarkLightTheme switch + IsDarkMode = _userPreferences.DarkLightTheme switch { DarkLightMode.Dark => true, DarkLightMode.Light => false, @@ -52,14 +53,22 @@ public void SetDarkMode(bool value) CurrentTheme.PaletteDark.PrimaryDarken = _userPreferences.PrimaryDarken; CurrentTheme.PaletteDark.PrimaryLighten = _userPreferences.PrimaryLighten; CurrentTheme.LayoutProperties.DefaultBorderRadius = BorderRadius + "px"; - CurrentTheme.Typography.Default.FontSize = DefaultFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Button.FontSize = _userPreferences.ButtonFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Body1.FontSize = _userPreferences.Body1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Body2.FontSize = _userPreferences.Body2FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Caption.FontSize = _userPreferences.CaptionFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Overline.FontSize = _userPreferences.OverlineFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Subtitle1.FontSize = _userPreferences.Subtitle1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Subtitle2.FontSize = _userPreferences.Subtitle1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Default.FontSize = + DefaultFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Button.FontSize = + _userPreferences.ButtonFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Body1.FontSize = + _userPreferences.Body1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Body2.FontSize = + _userPreferences.Body2FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Caption.FontSize = + _userPreferences.CaptionFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Overline.FontSize = + _userPreferences.OverlineFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Subtitle1.FontSize = + _userPreferences.Subtitle1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Subtitle2.FontSize = + _userPreferences.Subtitle1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; } else { @@ -67,14 +76,18 @@ public void SetDarkMode(bool value) _userPreferences = new UserPreferences.UserPreferences { IsDarkMode = IsDarkMode }; await _userPreferencesService.SaveUserPreferences(_userPreferences); } + return _userPreferences; } public event EventHandler? MajorUpdateOccured; - private void OnMajorUpdateOccured() => MajorUpdateOccured?.Invoke(this, EventArgs.Empty); + private void OnMajorUpdateOccured() + { + MajorUpdateOccured?.Invoke(this, EventArgs.Empty); + } - public Task OnSystemPreferenceChanged(bool newValue) + public Task OnSystemPreferenceChanged(bool newValue) { _systemPreferences = newValue; if (DarkModeToggle == DarkLightMode.System) @@ -82,8 +95,10 @@ public Task OnSystemPreferenceChanged(bool newValue) IsDarkMode = newValue; OnMajorUpdateOccured(); } + return Task.CompletedTask; } + public async Task ToggleDarkMode() { switch (DarkModeToggle) @@ -106,6 +121,7 @@ public async Task ToggleDarkMode() await _userPreferencesService.SaveUserPreferences(_userPreferences); OnMajorUpdateOccured(); } + public async Task ToggleRightToLeft() { IsRTL = !IsRTL; @@ -113,13 +129,13 @@ public async Task ToggleRightToLeft() await _userPreferencesService.SaveUserPreferences(_userPreferences); OnMajorUpdateOccured(); } - + public async Task SetRightToLeft() { if (!IsRTL) await ToggleRightToLeft(); } - + public async Task SetLeftToRight() { if (IsRTL) @@ -137,7 +153,8 @@ public void SetBaseTheme(MudTheme theme) } CurrentTheme.LayoutProperties.DefaultBorderRadius = BorderRadius + "px"; - CurrentTheme.Typography.Default.FontSize = DefaultFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; //Added + CurrentTheme.Typography.Default.FontSize = + DefaultFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; //Added OnMajorUpdateOccured(); } @@ -150,6 +167,7 @@ public async Task SetPrimaryColor(string color) await _userPreferencesService.SaveUserPreferences(_userPreferences); OnMajorUpdateOccured(); } + public async Task SetSecondaryColor(string color) { SecondaryColor = color; @@ -159,6 +177,7 @@ public async Task SetSecondaryColor(string color) await _userPreferencesService.SaveUserPreferences(_userPreferences); OnMajorUpdateOccured(); } + public async Task SetBorderRadius(double size) { BorderRadius = size; @@ -167,6 +186,7 @@ public async Task SetBorderRadius(double size) await _userPreferencesService.SaveUserPreferences(_userPreferences); OnMajorUpdateOccured(); } + public async Task UpdateUserPreferences(UserPreferences.UserPreferences preferences) { _userPreferences = preferences; @@ -174,7 +194,7 @@ public async Task UpdateUserPreferences(UserPreferences.UserPreferences preferen { DarkLightMode.Dark => true, DarkLightMode.Light => false, - DarkLightMode.System => _systemPreferences=true, + DarkLightMode.System => _systemPreferences = true, _ => IsDarkMode }; IsRTL = _userPreferences.RightToLeft; @@ -188,19 +208,24 @@ public async Task UpdateUserPreferences(UserPreferences.UserPreferences preferen CurrentTheme.PaletteDark.PrimaryDarken = _userPreferences.PrimaryDarken; CurrentTheme.PaletteDark.PrimaryLighten = _userPreferences.PrimaryLighten; CurrentTheme.LayoutProperties.DefaultBorderRadius = BorderRadius + "px"; - CurrentTheme.Typography.Default.FontSize = DefaultFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Button.FontSize = _userPreferences.ButtonFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Body1.FontSize = _userPreferences.Body1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Body2.FontSize = _userPreferences.Body2FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Caption.FontSize = _userPreferences.CaptionFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Overline.FontSize = _userPreferences.OverlineFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Subtitle1.FontSize = _userPreferences.Subtitle1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Subtitle2.FontSize = _userPreferences.Subtitle1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - + CurrentTheme.Typography.Default.FontSize = + DefaultFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Button.FontSize = + _userPreferences.ButtonFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Body1.FontSize = + _userPreferences.Body1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Body2.FontSize = + _userPreferences.Body2FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Caption.FontSize = + _userPreferences.CaptionFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Overline.FontSize = + _userPreferences.OverlineFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Subtitle1.FontSize = + _userPreferences.Subtitle1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Subtitle2.FontSize = + _userPreferences.Subtitle1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; await _userPreferencesService.SaveUserPreferences(_userPreferences); - - } -} +} \ No newline at end of file diff --git a/src/Server.UI/Services/Navigation/IMenuService.cs b/src/Server.UI/Services/Navigation/IMenuService.cs index 674ac0869..8a8a89154 100644 --- a/src/Server.UI/Services/Navigation/IMenuService.cs +++ b/src/Server.UI/Services/Navigation/IMenuService.cs @@ -5,4 +5,4 @@ namespace CleanArchitecture.Blazor.Server.UI.Services.Navigation; public interface IMenuService { IEnumerable Features { get; } -} +} \ No newline at end of file diff --git a/src/Server.UI/Services/Notifications/INotificationsService.cs b/src/Server.UI/Services/Notifications/INotificationsService.cs index b41f39c62..30959c798 100644 --- a/src/Server.UI/Services/Notifications/INotificationsService.cs +++ b/src/Server.UI/Services/Notifications/INotificationsService.cs @@ -2,7 +2,6 @@ namespace CleanArchitecture.Blazor.Server.UI.Services.Notifications; public interface INotificationService { - Task AreNewNotificationsAvailable(); Task MarkNotificationsAsRead(); Task MarkNotificationsAsRead(string id); diff --git a/src/Server.UI/Services/Notifications/InMemoryNotificationService.cs b/src/Server.UI/Services/Notifications/InMemoryNotificationService.cs index 32c7dc4b7..a3f616eeb 100644 --- a/src/Server.UI/Services/Notifications/InMemoryNotificationService.cs +++ b/src/Server.UI/Services/Notifications/InMemoryNotificationService.cs @@ -19,27 +19,6 @@ public InMemoryNotificationService(ProtectedLocalStorage localStorageService, _messages = new List(); } - private async Task GetLastReadTimestamp() - { - try - { - if ((await _localStorageService.GetAsync(LocalStorageKey)).Success == false) - { - return DateTime.MinValue; - } - else - { - var timestamp = await _localStorageService.GetAsync(LocalStorageKey); - return timestamp.Value; - } - } - catch (CryptographicException) - { - await _localStorageService.DeleteAsync(LocalStorageKey); - return DateTime.MinValue; - } - } - public async Task AreNewNotificationsAvailable() { var timestamp = await GetLastReadTimestamp(); @@ -56,18 +35,16 @@ public async Task MarkNotificationsAsRead() public async Task MarkNotificationsAsRead(string id) { var message = await GetMessageById(id); - if (message == null) { return; } + if (message == null) return; var timestamp = await _localStorageService.GetAsync(LocalStorageKey); - if (timestamp.Success) - { - await _localStorageService.SetAsync(LocalStorageKey, message.PublishDate); - } - + if (timestamp.Success) await _localStorageService.SetAsync(LocalStorageKey, message.PublishDate); } - public Task GetMessageById(string id) => - Task.FromResult(_messages.First((x => x.Id == id))); + public Task GetMessageById(string id) + { + return Task.FromResult(_messages.First(x => x.Id == id)); + } public async Task> GetNotifications() { @@ -82,6 +59,23 @@ public Task AddNotification(NotificationMessage message) return Task.CompletedTask; } + private async Task GetLastReadTimestamp() + { + try + { + if ((await _localStorageService.GetAsync(LocalStorageKey)).Success == false) + return DateTime.MinValue; + + var timestamp = await _localStorageService.GetAsync(LocalStorageKey); + return timestamp.Value; + } + catch (CryptographicException) + { + await _localStorageService.DeleteAsync(LocalStorageKey); + return DateTime.MinValue; + } + } + public void Preload() { diff --git a/src/Server.UI/Services/Notifications/NotificationMessages.cs b/src/Server.UI/Services/Notifications/NotificationMessages.cs index 5577d6fe6..4a0b25572 100644 --- a/src/Server.UI/Services/Notifications/NotificationMessages.cs +++ b/src/Server.UI/Services/Notifications/NotificationMessages.cs @@ -1,5 +1,13 @@ namespace CleanArchitecture.Blazor.Server.UI.Services.Notifications; public record NotificationAuthor(string DisplayName, string AvatarUlr); -public record NotificationMessage(string Id, string Title, string Except, string Category, DateTime PublishDate, string ImgUrl, IEnumerable Authors, Type ContentComponent); +public record NotificationMessage( + string Id, + string Title, + string Except, + string Category, + DateTime PublishDate, + string ImgUrl, + IEnumerable Authors, + Type ContentComponent); \ No newline at end of file diff --git a/src/Server.UI/Services/UserPreferences/UserPreferences.cs b/src/Server.UI/Services/UserPreferences/UserPreferences.cs index e9a4d52c9..07b5109c7 100644 --- a/src/Server.UI/Services/UserPreferences/UserPreferences.cs +++ b/src/Server.UI/Services/UserPreferences/UserPreferences.cs @@ -2,21 +2,24 @@ // MudBlazor licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System.Globalization; + namespace CleanArchitecture.Blazor.Server.UI.Services.UserPreferences; public class UserPreferences { /// - /// Set the direction layout of the docs to RTL or LTR. If true RTL is used + /// Set the direction layout of the docs to RTL or LTR. If true RTL is used /// public bool RightToLeft { get; set; } /// - /// If true DarkTheme is used. LightTheme otherwise + /// If true DarkTheme is used. LightTheme otherwise /// public bool IsDarkMode { get; set; } + public string PrimaryColor { get; set; } = "#2d4275"; - public string PrimaryDarken => AdjustBrightness(PrimaryColor,0.8); + public string PrimaryDarken => AdjustBrightness(PrimaryColor, 0.8); public string PrimaryLighten => AdjustBrightness(PrimaryColor, 0.7); public string SecondaryColor { get; set; } = "#ff4081ff"; public double BorderRadius { get; set; } = 4; @@ -26,7 +29,7 @@ public class UserPreferences public double Body2FontSize => DefaultFontSize - 0.125; public double ButtonFontSize => DefaultFontSize; public double CaptionFontSize => DefaultFontSize - 0.125; - public double OverlineFontSize=> DefaultFontSize - 0.125; + public double OverlineFontSize => DefaultFontSize - 0.125; public double Subtitle1FontSize => DefaultFontSize + 0.125; public double Subtitle2FontSize => DefaultFontSize; public DarkLightMode DarkLightTheme { get; set; } @@ -34,30 +37,25 @@ public class UserPreferences private string AdjustBrightness(string hexColor, double factor) { - if (hexColor.StartsWith("#")) - { - hexColor = hexColor.Substring(1); // 删除#前缀,如果存在 - } + if (hexColor.StartsWith("#")) hexColor = hexColor.Substring(1); // 删除#前缀,如果存在 - if (hexColor.Length != 6) - { - throw new ArgumentException("Invalid hex color code. It must be 6 characters long."); - } + if (hexColor.Length != 6) throw new ArgumentException("Invalid hex color code. It must be 6 characters long."); - int r = int.Parse(hexColor.Substring(0, 2), System.Globalization.NumberStyles.HexNumber); - int g = int.Parse(hexColor.Substring(2, 2), System.Globalization.NumberStyles.HexNumber); - int b = int.Parse(hexColor.Substring(4, 2), System.Globalization.NumberStyles.HexNumber); + var r = int.Parse(hexColor.Substring(0, 2), NumberStyles.HexNumber); + var g = int.Parse(hexColor.Substring(2, 2), NumberStyles.HexNumber); + var b = int.Parse(hexColor.Substring(4, 2), NumberStyles.HexNumber); - int newR = (int)Math.Clamp(r * factor, 0, 255); - int newG = (int)Math.Clamp(g * factor, 0, 255); - int newB = (int)Math.Clamp(b * factor, 0, 255); + var newR = (int)Math.Clamp(r * factor, 0, 255); + var newG = (int)Math.Clamp(g * factor, 0, 255); + var newB = (int)Math.Clamp(b * factor, 0, 255); return $"#{newR:X2}{newG:X2}{newB:X2}"; } } + public enum DarkLightMode { System = 0, Light = 1, Dark = 2 -} +} \ No newline at end of file diff --git a/src/Server.UI/Services/UserPreferences/UserPreferencesService.cs b/src/Server.UI/Services/UserPreferences/UserPreferencesService.cs index 25ff609c6..37f58ad98 100644 --- a/src/Server.UI/Services/UserPreferences/UserPreferencesService.cs +++ b/src/Server.UI/Services/UserPreferences/UserPreferencesService.cs @@ -10,13 +10,13 @@ namespace CleanArchitecture.Blazor.Server.UI.Services.UserPreferences; public interface IUserPreferencesService { /// - /// Saves UserPreferences in local storage + /// Saves UserPreferences in local storage /// /// The userPreferences to save in the local storage public Task SaveUserPreferences(UserPreferences userPreferences); /// - /// Loads UserPreferences in local storage + /// Loads UserPreferences in local storage /// /// UserPreferences object. Null when no settings were found. public Task LoadUserPreferences(); @@ -24,8 +24,8 @@ public interface IUserPreferencesService public class UserPreferencesService : IUserPreferencesService { - private readonly ProtectedLocalStorage _localStorage; private const string Key = "userPreferences"; + private readonly ProtectedLocalStorage _localStorage; public UserPreferencesService(ProtectedLocalStorage localStorage) { @@ -42,10 +42,7 @@ public async Task LoadUserPreferences() try { var result = await _localStorage.GetAsync(Key); - if (result.Success && result.Value is not null) - { - return result.Value; - } + if (result.Success && result.Value is not null) return result.Value; return new UserPreferences(); } catch (CryptographicException) @@ -53,7 +50,5 @@ public async Task LoadUserPreferences() await _localStorage.DeleteAsync(Key); return new UserPreferences(); } - } -} - +} \ No newline at end of file diff --git a/src/Server.UI/_Imports.cs b/src/Server.UI/_Imports.cs index 0c9af6654..5bb6c7da3 100644 --- a/src/Server.UI/_Imports.cs +++ b/src/Server.UI/_Imports.cs @@ -15,4 +15,4 @@ global using Microsoft.EntityFrameworkCore; global using Microsoft.Extensions.Logging; global using MudBlazor; -global using Severity = MudBlazor.Severity; +global using Severity = MudBlazor.Severity; \ No newline at end of file diff --git a/src/Server.UI/_Imports.razor b/src/Server.UI/_Imports.razor index 26456a8cb..6b78d9665 100644 --- a/src/Server.UI/_Imports.razor +++ b/src/Server.UI/_Imports.razor @@ -17,7 +17,7 @@ @using MudExtensions.Enums @using BlazorTime @using MediatR -@using Fluxor +@using CleanArchitecture.Blazor.Server.UI.Fluxor @using AutoMapper @using FluentValidation; @using CleanArchitecture.Blazor.Domain @@ -50,5 +50,4 @@ @inject ISnackbar Snackbar @inject IDialogService DialogService @inject IConfiguration Config -@inject IAuthorizationService AuthService - +@inject IAuthorizationService AuthService \ No newline at end of file diff --git a/src/Server.UI/appsettings.json b/src/Server.UI/appsettings.json index 1e9245973..b77db2d3a 100644 --- a/src/Server.UI/appsettings.json +++ b/src/Server.UI/appsettings.json @@ -80,7 +80,7 @@ "IdentitySettings": { "RequireDigit": false, "RequiredLength": 2, - "MaxLength":16, + "MaxLength": 16, "RequireNonAlphanumeric": false, "RequireUpperCase": false, "RequireLowerCase": false, diff --git a/src/Server.UI/wwwroot/js/appInterop.js b/src/Server.UI/wwwroot/js/appInterop.js index 840da4507..ea5aa658f 100644 --- a/src/Server.UI/wwwroot/js/appInterop.js +++ b/src/Server.UI/wwwroot/js/appInterop.js @@ -1,9 +1,13 @@ -import { dotnet } from './notnet.js' +import {dotnet} from './notnet.js' import OpenSeadragon from 'https://cdnjs.cloudflare.com/ajax/libs/openseadragon/3.1.0/openseadragon.min.js'; -const { setModelImports, getAssemblyExports, getConfig } = await dotnet.withDiagnosticTracing(false).withApplicationArgumentsFromQuery().create(); +const { + setModelImports, + getAssemblyExports, + getConfig +} = await dotnet.withDiagnosticTracing(false).withApplicationArgumentsFromQuery().create(); setModelImports('appInterop.js', { window: { @@ -21,21 +25,17 @@ setModelImports('appInterop.js', { tileSources: { xmlns: "http://schemas.microsoft.com/deepzoom/2008", type: 'image', - url: url, + url, } }); console.log(viewer); } } -}) - +}); const config = getConfig(); const exports = await getAssemblyExports(config.mainAssemblyName); - - - await dotnet.run(); \ No newline at end of file diff --git a/src/Server.UI/wwwroot/js/fancybox.js b/src/Server.UI/wwwroot/js/fancybox.js index 7f1047f90..a2f1e1980 100644 --- a/src/Server.UI/wwwroot/js/fancybox.js +++ b/src/Server.UI/wwwroot/js/fancybox.js @@ -1,13 +1,14 @@ -import { Fancybox } from "https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.esm.js"; +import {Fancybox} from "https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.esm.js"; + export function previewImage(url, gallery) { if (url == null) return; if (isImageUrl(url)) { let images = []; if (gallery != null) { - images = gallery.filter(l => isImageUrl(l)).map(x => ({ src: x, caption: x.split("/").pop() })); + images = gallery.filter(l => isImageUrl(l)).map(x => ({src: x, caption: x.split("/").pop()})); } else { - images = [{ src: url, caption: url.split("/").pop() }]; + images = [{src: url, caption: url.split("/").pop()}]; } const fancybox = new Fancybox(images); } else { @@ -18,6 +19,7 @@ export function previewImage(url, gallery) { anchorElement.remove(); } } + function isImageUrl(url) { const imageExtensions = /\.(gif|jpe?g|tiff?|png|webp|bmp)$/i; return imageExtensions.test(url); diff --git a/src/Server.UI/wwwroot/js/msal/authConfig.js b/src/Server.UI/wwwroot/js/msal/authConfig.js index 1d660b5b8..7002a2a7f 100644 --- a/src/Server.UI/wwwroot/js/msal/authConfig.js +++ b/src/Server.UI/wwwroot/js/msal/authConfig.js @@ -65,4 +65,4 @@ const silentRequest = { scopes: ["openid", "profile", "User.Read", "Mail.Read"] }; -const logoutRequest = {} +const logoutRequest = {}; diff --git a/src/Server.UI/wwwroot/js/openseadragon.js b/src/Server.UI/wwwroot/js/openseadragon.js index 32b55af20..b1acc991b 100644 --- a/src/Server.UI/wwwroot/js/openseadragon.js +++ b/src/Server.UI/wwwroot/js/openseadragon.js @@ -13,7 +13,7 @@ export function showOpenSeadragon(element, url) { tileSources: { xmlns: "http://schemas.microsoft.com/deepzoom/2008", type: 'image', - url: url, + url, } }); console.log(viewer) diff --git a/src/Server.UI/wwwroot/js/orgchart.js b/src/Server.UI/wwwroot/js/orgchart.js index 1b21ad8f0..a745484dc 100644 --- a/src/Server.UI/wwwroot/js/orgchart.js +++ b/src/Server.UI/wwwroot/js/orgchart.js @@ -1,16 +1,16 @@ -import { OrgChart } from 'https://cdn.jsdelivr.net/npm/d3-org-chart@3.1.1/+esm' +import {OrgChart} from 'https://cdn.jsdelivr.net/npm/d3-org-chart@3.1.1/+esm' export function createOrgChart(orgdata) { - let chart + let chart; setTimeout(function () { //console.log(orgdata) const activeid = orgdata.find(x => x.isLoggedUser == true); chart = new OrgChart() - .nodeHeight((d) => 85 + 25) - .nodeWidth((d) => 220 + 2) - .childrenMargin((d) => 50) - .compactMarginBetween((d) => 35) - .compactMarginPair((d) => 30) + .nodeHeight(d => 85 + 25) + .nodeWidth(d => 220 + 2) + .childrenMargin(d => 50) + .compactMarginBetween(d => 35) + .compactMarginPair(d => 30) .neighbourMargin((a, b) => 20) .nodeContent(function (d, i, arr, state) { const color = '#FFFFFF'; diff --git a/src/Server/Common/Interfaces/ISignalRHub.cs b/src/Server/Common/Interfaces/ISignalRHub.cs index 80fa8cffc..e195421ea 100644 --- a/src/Server/Common/Interfaces/ISignalRHub.cs +++ b/src/Server/Common/Interfaces/ISignalRHub.cs @@ -1,4 +1,5 @@ namespace CleanArchitecture.Blazor.Server.Common.Interfaces; + public interface ISignalRHub { public const string Url = "/signalRHub"; diff --git a/src/Server/DependencyInjection.cs b/src/Server/DependencyInjection.cs index a6a687ee7..4d1f55ffb 100644 --- a/src/Server/DependencyInjection.cs +++ b/src/Server/DependencyInjection.cs @@ -23,10 +23,10 @@ public static IServiceCollection AddServer(this IServiceCollection services, ICo .AddLocalization(options => options.ResourcesPath = LocalizationConstants.ResourcesPath); services.AddHangfire(configuration => configuration - .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) - .UseSimpleAssemblyNameTypeSerializer() - .UseRecommendedSerializerSettings() - .UseInMemoryStorage()) + .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) + .UseSimpleAssemblyNameTypeSerializer() + .UseRecommendedSerializerSettings() + .UseInMemoryStorage()) .AddHangfireServer() .AddMvc(); @@ -42,9 +42,7 @@ public static IServiceCollection AddServer(this IServiceCollection services, ICo if (privacySettings!.UseGoogleAnalytics) { if (privacySettings.GoogleAnalyticsKey is null or "") - { throw new ArgumentNullException(nameof(privacySettings.GoogleAnalyticsKey)); - } services.AddGoogleAnalytics(privacySettings.GoogleAnalyticsKey); } diff --git a/src/Server/EndPoints/AuthController.cs b/src/Server/EndPoints/AuthController.cs index 1d4bab9f4..2d9fe9848 100644 --- a/src/Server/EndPoints/AuthController.cs +++ b/src/Server/EndPoints/AuthController.cs @@ -7,12 +7,13 @@ using Microsoft.AspNetCore.Mvc; namespace CleanArchitecture.Blazor.Server.EndPoints; + public class AuthController : Controller { - private readonly ILogger _logger; private readonly IDataProtectionProvider _dataProtectionProvider; - private readonly UserManager _userManager; + private readonly ILogger _logger; private readonly SignInManager _signInManager; + private readonly UserManager _userManager; public AuthController( ILogger logger, @@ -26,6 +27,7 @@ SignInManager signInManager _userManager = userManager; _signInManager = signInManager; } + [HttpGet("/auth/login")] [AllowAnonymous] public async Task Login(string token, string returnUrl) @@ -34,11 +36,9 @@ public async Task Login(string token, string returnUrl) var data = dataProtector.Unprotect(token); var parts = data.Split('|'); var identityUser = await _userManager.FindByIdAsync(parts[0]); - if (identityUser == null) - { - return Unauthorized(); - } - var isTokenValid = await _userManager.VerifyUserTokenAsync(identityUser, TokenOptions.DefaultProvider, "Login", parts[1]); + if (identityUser == null) return Unauthorized(); + var isTokenValid = + await _userManager.VerifyUserTokenAsync(identityUser, TokenOptions.DefaultProvider, "Login", parts[1]); if (isTokenValid) { var isPersistent = true; @@ -52,6 +52,7 @@ public async Task Login(string token, string returnUrl) return Unauthorized(); } + [HttpGet("/auth/externallogin")] [AllowAnonymous] public async Task ExternalLogin(string provider, string userName, string name, string accessToken) @@ -59,7 +60,8 @@ public async Task ExternalLogin(string provider, string userName, var user = await _userManager.FindByNameAsync(userName); if (user is null) { - var admin = await _userManager.FindByNameAsync("administrator") ?? throw new NotFoundException($"Application user administrator Not Found."); + var admin = await _userManager.FindByNameAsync("administrator") ?? + throw new NotFoundException("Application user administrator Not Found."); user = new ApplicationUser { EmailConfirmed = true, @@ -74,32 +76,24 @@ public async Task ExternalLogin(string provider, string userName, TenantName = admin.TenantName }; var createResult = await _userManager.CreateAsync(user); - if (!createResult.Succeeded) - { - return Unauthorized(); - } + if (!createResult.Succeeded) return Unauthorized(); var assignResult = await _userManager.AddToRoleAsync(user, RoleName.Basic); - if (!createResult.Succeeded) - { - return Unauthorized(); - } + if (!createResult.Succeeded) return Unauthorized(); await _userManager.AddLoginAsync(user, new UserLoginInfo(provider, userName, accessToken)); } - if (!user.IsActive) - { - return Unauthorized(); - } + if (!user.IsActive) return Unauthorized(); var isPersistent = true; await _signInManager.SignInAsync(user, isPersistent); return Redirect("/"); - } + [HttpGet("/auth/logout")] public async Task Logout() { var userId = _signInManager.Context.User.GetUserId(); - var identityUser = await _userManager.FindByIdAsync(userId!) ?? throw new NotFoundException($"Application user not found."); + var identityUser = await _userManager.FindByIdAsync(userId!) ?? + throw new NotFoundException("Application user not found."); identityUser.IsLive = false; await _userManager.UpdateAsync(identityUser); _logger.LogInformation("{@UserName} logout successful", identityUser.UserName); diff --git a/src/Server/Middlewares/ExceptionHandlingMiddleware.cs b/src/Server/Middlewares/ExceptionHandlingMiddleware.cs index aac36c5af..684de4a19 100644 --- a/src/Server/Middlewares/ExceptionHandlingMiddleware.cs +++ b/src/Server/Middlewares/ExceptionHandlingMiddleware.cs @@ -1,13 +1,14 @@ using System.Net; +using System.Text.Json; using CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; using Microsoft.Extensions.Localization; namespace CleanArchitecture.Blazor.Server.Middlewares; -public class ExceptionHandlingMiddleware : Microsoft.AspNetCore.Http.IMiddleware +public class ExceptionHandlingMiddleware : IMiddleware { - private readonly ILogger _logger; private readonly IStringLocalizer _localizer; + private readonly ILogger _logger; public ExceptionHandlingMiddleware( ILogger logger, @@ -25,28 +26,19 @@ public async Task InvokeAsync(HttpContext context, RequestDelegate next) } catch (Exception exception) { - var responseModel = await Result.FailureAsync(new string[] { exception.Message }); + var responseModel = await Result.FailureAsync(exception.Message); var response = context.Response; response.ContentType = "application/json"; if (exception is not ServerException && exception.InnerException != null) - { while (exception.InnerException != null) - { exception = exception.InnerException; - } - } - if (!string.IsNullOrEmpty(exception.Message)) - { - responseModel = await Result.FailureAsync(new string[] { exception.Message }); - } + if (!string.IsNullOrEmpty(exception.Message)) responseModel = await Result.FailureAsync(exception.Message); switch (exception) { case ServerException e: response.StatusCode = (int)e.StatusCode; if (e.ErrorMessages is not null) - { responseModel = await Result.FailureAsync(e.ErrorMessages.ToArray()); - } break; case KeyNotFoundException: response.StatusCode = (int)HttpStatusCode.NotFound; @@ -56,8 +48,9 @@ public async Task InvokeAsync(HttpContext context, RequestDelegate next) response.StatusCode = (int)HttpStatusCode.InternalServerError; break; } + //_logger.LogError(exception, $"{exception}. Request failed with Status Code {response.StatusCode}"); - await response.WriteAsync(System.Text.Json.JsonSerializer.Serialize(responseModel)); + await response.WriteAsync(JsonSerializer.Serialize(responseModel)); } } -} +} \ No newline at end of file diff --git a/src/Server/Middlewares/HangfireDashboardAuthorizationFilter.cs b/src/Server/Middlewares/HangfireDashboardAuthorizationFilter.cs index 31a5cd3d8..4dfcd38e3 100644 --- a/src/Server/Middlewares/HangfireDashboardAuthorizationFilter.cs +++ b/src/Server/Middlewares/HangfireDashboardAuthorizationFilter.cs @@ -1,9 +1,9 @@ using Hangfire.Dashboard; namespace CleanArchitecture.Blazor.Server.Middlewares; + public class HangfireDashboardAsyncAuthorizationFilter : IDashboardAsyncAuthorizationFilter { - public Task AuthorizeAsync(DashboardContext context) { return Task.FromResult(true); @@ -14,7 +14,6 @@ public class HangfireDashboardAuthorizationFilter : IDashboardAuthorizationFilte { public bool Authorize(DashboardContext context) { - return true; } } \ No newline at end of file diff --git a/src/Server/Middlewares/LocalizationCookiesMiddleware.cs b/src/Server/Middlewares/LocalizationCookiesMiddleware.cs index 9280229c4..332472c73 100644 --- a/src/Server/Middlewares/LocalizationCookiesMiddleware.cs +++ b/src/Server/Middlewares/LocalizationCookiesMiddleware.cs @@ -3,10 +3,8 @@ namespace CleanArchitecture.Blazor.Server.Middlewares; #nullable disable -public class LocalizationCookiesMiddleware : Microsoft.AspNetCore.Http.IMiddleware +public class LocalizationCookiesMiddleware : IMiddleware { - public CookieRequestCultureProvider Provider { get; } - public LocalizationCookiesMiddleware(IOptions requestLocalizationOptions) { Provider = @@ -18,6 +16,8 @@ public LocalizationCookiesMiddleware(IOptions reques .FirstOrDefault(); } + public CookieRequestCultureProvider Provider { get; } + public async Task InvokeAsync(HttpContext context, RequestDelegate next) { if (Provider != null) @@ -25,16 +25,14 @@ public async Task InvokeAsync(HttpContext context, RequestDelegate next) var feature = context.Features.Get(); if (feature != null) - { // remember culture across request context.Response .Cookies .Append( Provider.CookieName, CookieRequestCultureProvider.MakeCookieValue(feature.RequestCulture), - new CookieOptions() { Expires = new DateTimeOffset(DateTime.Now.AddMonths(3)) } + new CookieOptions { Expires = new DateTimeOffset(DateTime.Now.AddMonths(3)) } ); - } } await next(context); diff --git a/src/Server/Middlewares/LocalizationMiddleware.cs b/src/Server/Middlewares/LocalizationMiddleware.cs index 189bf3e33..f52ed2964 100644 --- a/src/Server/Middlewares/LocalizationMiddleware.cs +++ b/src/Server/Middlewares/LocalizationMiddleware.cs @@ -2,26 +2,25 @@ namespace CleanArchitecture.Blazor.Server.Middlewares; -public class LocalizationMiddleware : Microsoft.AspNetCore.Http.IMiddleware +public class LocalizationMiddleware : IMiddleware { public async Task InvokeAsync(HttpContext context, RequestDelegate next) { var cultureKey = context.Request.Headers["Accept-Language"]; if (!string.IsNullOrEmpty(cultureKey)) - { if (DoesCultureExist(cultureKey!)) { var culture = new CultureInfo(cultureKey!); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; } - } await next(context); } private static bool DoesCultureExist(string cultureName) { - return CultureInfo.GetCultures(CultureTypes.AllCultures).Any(culture => string.Equals(culture.Name, cultureName, StringComparison.CurrentCultureIgnoreCase)); + return CultureInfo.GetCultures(CultureTypes.AllCultures).Any(culture => + string.Equals(culture.Name, cultureName, StringComparison.CurrentCultureIgnoreCase)); } -} +} \ No newline at end of file diff --git a/src/Server/Server.csproj b/src/Server/Server.csproj index 39b261b4a..8defd6280 100644 --- a/src/Server/Server.csproj +++ b/src/Server/Server.csproj @@ -17,16 +17,16 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/Server/Services/ServerHubWrapper.cs b/src/Server/Services/ServerHubWrapper.cs index 59ad0b512..7e613cf28 100644 --- a/src/Server/Services/ServerHubWrapper.cs +++ b/src/Server/Services/ServerHubWrapper.cs @@ -3,6 +3,7 @@ using Microsoft.AspNetCore.SignalR; namespace CleanArchitecture.Blazor.Server.Services; + public class ServerHubWrapper : IApplicationHubWrapper { private readonly IHubContext _hubContext; @@ -21,4 +22,4 @@ public async Task JobCompleted(string message) { await _hubContext.Clients.All.Completed(message); } -} +} \ No newline at end of file diff --git a/src/Server/_Imports.cs b/src/Server/_Imports.cs index 6c57ddace..cb06ed3e4 100644 --- a/src/Server/_Imports.cs +++ b/src/Server/_Imports.cs @@ -5,4 +5,4 @@ global using FluentValidation; global using Microsoft.AspNetCore.Builder; global using Microsoft.AspNetCore.Http; -global using Microsoft.Extensions.Logging; +global using Microsoft.Extensions.Logging; \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Application.IntegrationTests.csproj b/tests/Application.IntegrationTests/Application.IntegrationTests.csproj index ef6b97e33..b1ea8573b 100644 --- a/tests/Application.IntegrationTests/Application.IntegrationTests.csproj +++ b/tests/Application.IntegrationTests/Application.IntegrationTests.csproj @@ -22,7 +22,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/tests/Application.IntegrationTests/KeyValues/Commands/AddEditKeyValueCommandTests.cs b/tests/Application.IntegrationTests/KeyValues/Commands/AddEditKeyValueCommandTests.cs index 8f8356f52..8c95e535e 100644 --- a/tests/Application.IntegrationTests/KeyValues/Commands/AddEditKeyValueCommandTests.cs +++ b/tests/Application.IntegrationTests/KeyValues/Commands/AddEditKeyValueCommandTests.cs @@ -2,40 +2,45 @@ using CleanArchitecture.Blazor.Application.Features.KeyValues.Commands.AddEdit; using CleanArchitecture.Blazor.Domain.Entities; using FluentAssertions; +using FluentValidation; using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.KeyValues.Commands; + using static Testing; + internal class AddEditKeyValueCommandTests : TestBase { - [Test] public void ShouldThrowValidationException() { var command = new AddEditKeyValueCommand(); FluentActions.Invoking(() => - SendAsync(command)).Should().ThrowAsync(); + SendAsync(command)).Should().ThrowAsync(); } [Test] public async Task InsertItem() { - var addCommand = new AddEditKeyValueCommand() { Name= Picklist.Brand, Text="Test",Value="Test",Description= "Description" }; + var addCommand = new AddEditKeyValueCommand + { Name = Picklist.Brand, Text = "Test", Value = "Test", Description = "Description" }; var result = await SendAsync(addCommand); var find = await FindAsync(result.Data); find.Should().NotBeNull(); find.Name.Should().Be(Picklist.Brand); find.Text.Should().Be("Test"); find.Value.Should().Be("Test"); - } + [Test] public async Task UpdateItem() { - var addCommand = new AddEditKeyValueCommand() { Name = Picklist.Brand, Text = "Test", Value = "Test", Description = "Description" }; + var addCommand = new AddEditKeyValueCommand + { Name = Picklist.Brand, Text = "Test", Value = "Test", Description = "Description" }; var result = await SendAsync(addCommand); var find = await FindAsync(result.Data); - var editCommand = new AddEditKeyValueCommand() { Id=find.Id, Name = Picklist.Brand, Text = "Test1", Value = "Test1", Description = "Description1" }; + var editCommand = new AddEditKeyValueCommand + { Id = find.Id, Name = Picklist.Brand, Text = "Test1", Value = "Test1", Description = "Description1" }; await SendAsync(editCommand); var updated = await FindAsync(find.Id); updated.Should().NotBeNull(); @@ -44,4 +49,4 @@ public async Task UpdateItem() updated.Value.Should().Be("Test1"); updated.Description.Should().Be("Description1"); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/KeyValues/Commands/DeleteKeyValueTests.cs b/tests/Application.IntegrationTests/KeyValues/Commands/DeleteKeyValueTests.cs index ab1e832c9..0542d68a9 100644 --- a/tests/Application.IntegrationTests/KeyValues/Commands/DeleteKeyValueTests.cs +++ b/tests/Application.IntegrationTests/KeyValues/Commands/DeleteKeyValueTests.cs @@ -6,39 +6,37 @@ using FluentAssertions; using NUnit.Framework; -namespace CleanArchitecture.Blazor.Application.IntegrationTests.KeyValues.Commands +namespace CleanArchitecture.Blazor.Application.IntegrationTests.KeyValues.Commands; + +using static Testing; + +public class DeleteKeyValueTests : TestBase { - using static Testing; + [Test] + public void ShouldRequireValidKeyValueId() + { + var command = new DeleteKeyValueCommand(new[] { 99 }); - public class DeleteKeyValueTests : TestBase + FluentActions.Invoking(() => + SendAsync(command)).Should().ThrowAsync(); + } + + [Test] + public async Task ShouldDeleteKeyValue() { - [Test] - public void ShouldRequireValidKeyValueId() + var addCommand = new AddEditKeyValueCommand { - var command = new DeleteKeyValueCommand (new int[] { 99}); + Name = Picklist.Brand, + Text = "Word", + Value = "Word", + Description = "For Test" + }; + var result = await SendAsync(addCommand); - FluentActions.Invoking(() => - SendAsync(command)).Should().ThrowAsync(); - } + await SendAsync(new DeleteKeyValueCommand(new[] { result.Data })); - [Test] - public async Task ShouldDeleteKeyValue() - { - var addCommand = new AddEditKeyValueCommand() - { - Name = Picklist.Brand, - Text= "Word", - Value = "Word", - Description = "For Test" - }; - var result= await SendAsync(addCommand); - - await SendAsync(new DeleteKeyValueCommand(new int[] { result.Data })); - - var item = await FindAsync(result.Data); - - item.Should().BeNull(); - } - + var item = await FindAsync(result.Data); + + item.Should().BeNull(); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/KeyValues/Queries/ExportKeyValuesQueryTests.cs b/tests/Application.IntegrationTests/KeyValues/Queries/ExportKeyValuesQueryTests.cs index fbd147f1c..925f33a91 100644 --- a/tests/Application.IntegrationTests/KeyValues/Queries/ExportKeyValuesQueryTests.cs +++ b/tests/Application.IntegrationTests/KeyValues/Queries/ExportKeyValuesQueryTests.cs @@ -4,16 +4,16 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.KeyValues.Queries; + using static Testing; + internal class ExportKeyValuesQueryTests : TestBase { - - [Test] public async Task ShouldNotEmptyExportQuery() { var query = new ExportKeyValuesQuery(); - var result =await SendAsync(query); + var result = await SendAsync(query); result.Should().NotBeNull(); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/KeyValues/Queries/KeyValuesQueryTests.cs b/tests/Application.IntegrationTests/KeyValues/Queries/KeyValuesQueryTests.cs index f2d968ad0..3b1394237 100644 --- a/tests/Application.IntegrationTests/KeyValues/Queries/KeyValuesQueryTests.cs +++ b/tests/Application.IntegrationTests/KeyValues/Queries/KeyValuesQueryTests.cs @@ -6,18 +6,18 @@ using FluentAssertions; using NUnit.Framework; -namespace CleanArchitecture.Blazor.Application.IntegrationTests.KeyValues.Queries +namespace CleanArchitecture.Blazor.Application.IntegrationTests.KeyValues.Queries; + +using static Testing; + +public class KeyValuesQueryTests : TestBase { - using static Testing; - public class KeyValuesQueryTests : TestBase + [Test] + public void ShouldNotNullKeyValuesQueryByName() { - [Test] - public void ShouldNotNullKeyValuesQueryByName() - { - var query = new KeyValuesQueryByName(Picklist.Brand); - var result = SendAsync(query); - FluentActions.Invoking(() => - SendAsync(query)).Should().NotBeNull(); - } + var query = new KeyValuesQueryByName(Picklist.Brand); + var result = SendAsync(query); + FluentActions.Invoking(() => + SendAsync(query)).Should().NotBeNull(); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/KeyValues/Queries/KeyValuesWithPaginationQueryTests.cs b/tests/Application.IntegrationTests/KeyValues/Queries/KeyValuesWithPaginationQueryTests.cs index a1f9690b8..6bc41a24a 100644 --- a/tests/Application.IntegrationTests/KeyValues/Queries/KeyValuesWithPaginationQueryTests.cs +++ b/tests/Application.IntegrationTests/KeyValues/Queries/KeyValuesWithPaginationQueryTests.cs @@ -4,19 +4,26 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.KeyValues.Queries; + using static Testing; -internal class KeyValuesWithPaginationQueryTests: TestBase + +internal class KeyValuesWithPaginationQueryTests : TestBase { [SetUp] public async Task InitData() { - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text1", Value = "Value1" ,Description= "Test Description" }); - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text2", Value = "Value2", Description = "Test Description" }); - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text3", Value = "Value3", Description = "Test Description" }); - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text4", Value = "Value4", Description = "Test Description" }); - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text5", Value = "Value5", Description = "Test Description" }); - + await AddAsync(new KeyValue + { Name = Picklist.Brand, Text = "Text1", Value = "Value1", Description = "Test Description" }); + await AddAsync(new KeyValue + { Name = Picklist.Brand, Text = "Text2", Value = "Value2", Description = "Test Description" }); + await AddAsync(new KeyValue + { Name = Picklist.Brand, Text = "Text3", Value = "Value3", Description = "Test Description" }); + await AddAsync(new KeyValue + { Name = Picklist.Brand, Text = "Text4", Value = "Value4", Description = "Test Description" }); + await AddAsync(new KeyValue + { Name = Picklist.Brand, Text = "Text5", Value = "Value5", Description = "Test Description" }); } + [Test] public async Task ShouldNotEmptyQuery() { @@ -24,11 +31,12 @@ public async Task ShouldNotEmptyQuery() var result = await SendAsync(query); Assert.Equals(5, result.TotalItems); } + [Test] public async Task ShouldNotEmptyKeywordQuery() { - var query = new KeyValuesWithPaginationQuery() { Keyword="1"}; + var query = new KeyValuesWithPaginationQuery { Keyword = "1" }; var result = await SendAsync(query); Assert.Equals(1, result.TotalItems); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Products/Commands/AddEditProductCommandTests.cs b/tests/Application.IntegrationTests/Products/Commands/AddEditProductCommandTests.cs index da3254ad4..445da0da5 100644 --- a/tests/Application.IntegrationTests/Products/Commands/AddEditProductCommandTests.cs +++ b/tests/Application.IntegrationTests/Products/Commands/AddEditProductCommandTests.cs @@ -1,25 +1,33 @@ -using System.Threading.Tasks; +using System.Collections.Generic; +using System.Threading.Tasks; using CleanArchitecture.Blazor.Application.Features.Products.Commands.AddEdit; using CleanArchitecture.Blazor.Domain.Entities; using FluentAssertions; +using FluentValidation; using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.Products.Commands; + using static Testing; -internal class AddEditProductCommandTests: TestBase + +internal class AddEditProductCommandTests : TestBase { [Test] public void ShouldThrowValidationException() { var command = new AddEditProductCommand(); FluentActions.Invoking(() => - SendAsync(command)).Should().ThrowAsync(); + SendAsync(command)).Should().ThrowAsync(); } [Test] public async Task InsertItem() { - var addCommand = new AddEditProductCommand() { Name = "Test", Brand="Brand", Price=100m, Unit="EA", Description = "Description", Pictures= new System.Collections.Generic.List{ new ProductImage() { Name="test.jpg", Url="test.jpg", Size=1 } } }; + var addCommand = new AddEditProductCommand + { + Name = "Test", Brand = "Brand", Price = 100m, Unit = "EA", Description = "Description", + Pictures = new List { new() { Name = "test.jpg", Url = "test.jpg", Size = 1 } } + }; var result = await SendAsync(addCommand); var find = await FindAsync(result.Data); find.Should().NotBeNull(); @@ -28,13 +36,22 @@ public async Task InsertItem() find.Price.Should().Be(100); find.Unit.Should().Be("EA"); } + [Test] public async Task UpdateItem() { - var addCommand = new AddEditProductCommand() { Name = "Test", Brand = "Brand", Price = 100m, Unit = "EA", Description = "Description",Pictures = new System.Collections.Generic.List { new ProductImage() { Name = "test.jpg", Url = "test.jpg", Size = 1 } } }; + var addCommand = new AddEditProductCommand + { + Name = "Test", Brand = "Brand", Price = 100m, Unit = "EA", Description = "Description", + Pictures = new List { new() { Name = "test.jpg", Url = "test.jpg", Size = 1 } } + }; var result = await SendAsync(addCommand); var find = await FindAsync(result.Data); - var editCommand = new AddEditProductCommand() { Id = find.Id, Name = "Test1", Brand = "Brand1", Price =200m, Unit = "KG", Pictures= addCommand.Pictures, Description = "Description1" }; + var editCommand = new AddEditProductCommand + { + Id = find.Id, Name = "Test1", Brand = "Brand1", Price = 200m, Unit = "KG", Pictures = addCommand.Pictures, + Description = "Description1" + }; await SendAsync(editCommand); var updated = await FindAsync(find.Id); updated.Should().NotBeNull(); @@ -44,4 +61,4 @@ public async Task UpdateItem() updated.Price.Should().Be(200); updated.Unit.Should().Be("KG"); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Products/Commands/DeleteProductCommandTests.cs b/tests/Application.IntegrationTests/Products/Commands/DeleteProductCommandTests.cs index 3ea56f156..42d08d345 100644 --- a/tests/Application.IntegrationTests/Products/Commands/DeleteProductCommandTests.cs +++ b/tests/Application.IntegrationTests/Products/Commands/DeleteProductCommandTests.cs @@ -9,13 +9,15 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.Products.Commands; + using static Testing; -internal class DeleteProductCommandTests: TestBase + +internal class DeleteProductCommandTests : TestBase { [Test] - public void ShouldRequireValidKeyValueId() + public void ShouldRequireValidKeyValueId() { - var command = new DeleteProductCommand(new int[] { 99 }); + var command = new DeleteProductCommand(new[] { 99 }); FluentActions.Invoking(() => SendAsync(command)).Should().ThrowAsync(); @@ -24,23 +26,26 @@ public void ShouldRequireValidKeyValueId() [Test] public async Task ShouldDeleteOne() { - var addCommand = new AddEditProductCommand() { Name = "Test", Brand = "Brand", Price = 100m, Unit = "EA", Description = "Description" }; + var addCommand = new AddEditProductCommand + { Name = "Test", Brand = "Brand", Price = 100m, Unit = "EA", Description = "Description" }; var result = await SendAsync(addCommand); - await SendAsync(new DeleteProductCommand(new int[] { result.Data })); + await SendAsync(new DeleteProductCommand(new[] { result.Data })); var item = await FindAsync(result.Data); item.Should().BeNull(); } + [SetUp] public async Task InitData() { - await AddAsync(new Product() { Name = "Test1" }); - await AddAsync(new Product() { Name = "Test2" }); - await AddAsync(new Product() { Name = "Test3" }); - await AddAsync(new Product() { Name = "Test4" }); + await AddAsync(new Product { Name = "Test1" }); + await AddAsync(new Product { Name = "Test2" }); + await AddAsync(new Product { Name = "Test3" }); + await AddAsync(new Product { Name = "Test4" }); } + [Test] public async Task ShouldDeleteAll() { @@ -53,7 +58,5 @@ public async Task ShouldDeleteAll() var deleteResult = await SendAsync(query); deleteResult.Should().BeNullOrEmpty(); - - } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Products/Commands/ImportProductsCommandTests.cs b/tests/Application.IntegrationTests/Products/Commands/ImportProductsCommandTests.cs index 93782745a..83bc47d75 100644 --- a/tests/Application.IntegrationTests/Products/Commands/ImportProductsCommandTests.cs +++ b/tests/Application.IntegrationTests/Products/Commands/ImportProductsCommandTests.cs @@ -8,7 +8,8 @@ namespace CleanArchitecture.Blazor.Application.IntegrationTests.Products.Commands; using static Testing; -internal class ImportProductsCommandTests: TestBase + +internal class ImportProductsCommandTests : TestBase { [Test] public async Task DownloadTemplate() @@ -22,10 +23,10 @@ public async Task DownloadTemplate() public async Task ImportDataFromExcel() { var dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); - var excelFile = Path.Combine(dir,"../../../", "Products", "ImportExcel", "Products.xlsx"); + var excelFile = Path.Combine(dir, "../../../", "Products", "ImportExcel", "Products.xlsx"); var data = File.ReadAllBytes(excelFile); var cmd = new ImportProductsCommand("Products.xlsx", data); var result = await SendAsync(cmd); result.Succeeded.Should().BeTrue(); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Products/Queries/ExportProductsQueryTests.cs b/tests/Application.IntegrationTests/Products/Queries/ExportProductsQueryTests.cs index b3319fd43..8e2ca0818 100644 --- a/tests/Application.IntegrationTests/Products/Queries/ExportProductsQueryTests.cs +++ b/tests/Application.IntegrationTests/Products/Queries/ExportProductsQueryTests.cs @@ -4,14 +4,17 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.Products.Queries; + using static Testing; + internal class ExportProductsQueryTests : TestBase { [Test] public async Task ShouldNotEmptyExportQuery() { - var query = new ExportProductsQuery() { - OrderBy = "Id", + var query = new ExportProductsQuery + { + OrderBy = "Id", SortDirection = "Ascending" }; var result = await SendAsync(query); @@ -21,11 +24,13 @@ public async Task ShouldNotEmptyExportQuery() [Test] public async Task ShouldNotEmptyExportQueryWithFilter() { - var query = new ExportProductsQuery() { Keyword="1", + var query = new ExportProductsQuery + { + Keyword = "1", OrderBy = "Id", SortDirection = "Ascending" }; var result = await SendAsync(query); result.Should().NotBeNull(); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Products/Queries/GetAllProductsQueryTests.cs b/tests/Application.IntegrationTests/Products/Queries/GetAllProductsQueryTests.cs index 86696b71a..f09e18783 100644 --- a/tests/Application.IntegrationTests/Products/Queries/GetAllProductsQueryTests.cs +++ b/tests/Application.IntegrationTests/Products/Queries/GetAllProductsQueryTests.cs @@ -5,17 +5,20 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.Products.Queries; + using static Testing; + internal class GetAllProductsQueryTests : TestBase { [SetUp] public async Task InitData() { - await AddAsync(new Product() { Name = "Test1" }); - await AddAsync(new Product() { Name = "Test2" }); - await AddAsync(new Product() { Name = "Test3" }); - await AddAsync(new Product() { Name = "Test4" }); + await AddAsync(new Product { Name = "Test1" }); + await AddAsync(new Product { Name = "Test2" }); + await AddAsync(new Product { Name = "Test3" }); + await AddAsync(new Product { Name = "Test4" }); } + [Test] public async Task ShouldQueryAll() { @@ -23,14 +26,15 @@ public async Task ShouldQueryAll() var result = await SendAsync(query); Assert.Equals(4, result.Count()); } + [Test] public async Task ShouldQueryById() { var query = new GetAllProductsQuery(); var result = await SendAsync(query); - var id= result.Last().Id; - var getProductQuery = new GetProductQuery() { Id = id }; + var id = result.Last().Id; + var getProductQuery = new GetProductQuery { Id = id }; var product = await SendAsync(getProductQuery); Assert.Equals(id, product.Id); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Products/Queries/ProductsPaginationQueryTests.cs b/tests/Application.IntegrationTests/Products/Queries/ProductsPaginationQueryTests.cs index d9419a344..eee2991a4 100644 --- a/tests/Application.IntegrationTests/Products/Queries/ProductsPaginationQueryTests.cs +++ b/tests/Application.IntegrationTests/Products/Queries/ProductsPaginationQueryTests.cs @@ -4,18 +4,21 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.Products.Queries; + using static Testing; + internal class ProductsPaginationQueryTests : TestBase { [SetUp] public async Task InitData() { - await AddAsync(new Product() { Name = "Test1", Price=19, Brand="Test1", Unit="EA", Description="Test1" }); - await AddAsync(new Product() { Name = "Test2", Price = 19, Brand = "Test2", Unit = "EA", Description = "Test1" }); - await AddAsync(new Product() { Name = "Test3", Price = 19, Brand = "Test3", Unit = "EA", Description = "Test1" }); - await AddAsync(new Product() { Name = "Test4", Price = 19, Brand = "Test4", Unit = "EA", Description = "Test1" }); - await AddAsync(new Product() { Name = "Test5", Price = 19, Brand = "Test5", Unit = "EA", Description = "Test1" }); + await AddAsync(new Product { Name = "Test1", Price = 19, Brand = "Test1", Unit = "EA", Description = "Test1" }); + await AddAsync(new Product { Name = "Test2", Price = 19, Brand = "Test2", Unit = "EA", Description = "Test1" }); + await AddAsync(new Product { Name = "Test3", Price = 19, Brand = "Test3", Unit = "EA", Description = "Test1" }); + await AddAsync(new Product { Name = "Test4", Price = 19, Brand = "Test4", Unit = "EA", Description = "Test1" }); + await AddAsync(new Product { Name = "Test5", Price = 19, Brand = "Test5", Unit = "EA", Description = "Test1" }); } + [Test] public async Task ShouldNotEmptyQuery() { @@ -23,10 +26,11 @@ public async Task ShouldNotEmptyQuery() var result = await SendAsync(query); Assert.Equals(5, result.TotalItems); } + [Test] public async Task ShouldNotEmptyKeywordQuery() { - var query = new ProductsWithPaginationQuery() { Keyword = "1" }; + var query = new ProductsWithPaginationQuery { Keyword = "1" }; var result = await SendAsync(query); Assert.Equals(5, result.TotalItems); } @@ -34,8 +38,8 @@ public async Task ShouldNotEmptyKeywordQuery() [Test] public async Task ShouldNotEmptySpecificationQuery() { - var query = new ProductsWithPaginationQuery() { Keyword = "1", Brand= "Test1", Unit="EA", Name= "Test1" }; + var query = new ProductsWithPaginationQuery { Keyword = "1", Brand = "Test1", Unit = "EA", Name = "Test1" }; var result = await SendAsync(query); Assert.Equals(1, result.TotalItems); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Services/PicklistServiceTests.cs b/tests/Application.IntegrationTests/Services/PicklistServiceTests.cs index 4fabb326d..e1fb33e16 100644 --- a/tests/Application.IntegrationTests/Services/PicklistServiceTests.cs +++ b/tests/Application.IntegrationTests/Services/PicklistServiceTests.cs @@ -4,17 +4,20 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.Services; + using static Testing; + public class PicklistServiceTests : TestBase { [SetUp] public async Task InitData() { - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text="Text1",Value="Value1" }); - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text2", Value = "Value2" }); - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text3", Value = "Value3" }); - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text4", Value = "Value4" }); + await AddAsync(new KeyValue { Name = Picklist.Brand, Text = "Text1", Value = "Value1" }); + await AddAsync(new KeyValue { Name = Picklist.Brand, Text = "Text2", Value = "Value2" }); + await AddAsync(new KeyValue { Name = Picklist.Brand, Text = "Text3", Value = "Value3" }); + await AddAsync(new KeyValue { Name = Picklist.Brand, Text = "Text4", Value = "Value4" }); } + [Test] public async Task ShouldLoadDataSource() { @@ -22,16 +25,15 @@ public async Task ShouldLoadDataSource() await picklist.InitializeAsync(); var count = picklist.DataSource.Count(); Assert.Equals(4, count); - } + [Test] public async Task ShouldUpdateDataSource() { - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text5", Value = "Value5" }); + await AddAsync(new KeyValue { Name = Picklist.Brand, Text = "Text5", Value = "Value5" }); var picklist = CreatePicklistService(); await picklist.Refresh(); var count = picklist.DataSource.Count(); Assert.Equals(5, count); - } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Services/TenantsServiceTests.cs b/tests/Application.IntegrationTests/Services/TenantsServiceTests.cs index 262056caa..06c5e86f1 100644 --- a/tests/Application.IntegrationTests/Services/TenantsServiceTests.cs +++ b/tests/Application.IntegrationTests/Services/TenantsServiceTests.cs @@ -4,16 +4,18 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.Services; + using static Testing; + public class TenantsServiceTests : TestBase { [SetUp] public async Task InitData() { - await AddAsync(new Tenant() { Name = "Test1", Description= "Test1" }); - await AddAsync(new Tenant() { Name = "Test2", Description = "Text2" }); - + await AddAsync(new Tenant { Name = "Test1", Description = "Test1" }); + await AddAsync(new Tenant { Name = "Test2", Description = "Text2" }); } + [Test] public void ShouldLoadDataSource() { @@ -21,16 +23,15 @@ public void ShouldLoadDataSource() tenantsService.Initialize(); var count = tenantsService.DataSource.Count(); Assert.Equals(2, count); - } + [Test] public async Task ShouldUpdateDataSource() { - await AddAsync(new Tenant() { Name = "Test3", Description = "Test3" }); + await AddAsync(new Tenant { Name = "Test3", Description = "Test3" }); var tenantsService = CreateTenantsService(); await tenantsService.Refresh(); var count = tenantsService.DataSource.Count(); Assert.Equals(3, count); - } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/TestBase.cs b/tests/Application.IntegrationTests/TestBase.cs index ae87bd6a6..4647b6054 100644 --- a/tests/Application.IntegrationTests/TestBase.cs +++ b/tests/Application.IntegrationTests/TestBase.cs @@ -1,16 +1,15 @@ using System.Threading.Tasks; using NUnit.Framework; -namespace CleanArchitecture.Blazor.Application.IntegrationTests -{ - using static Testing; +namespace CleanArchitecture.Blazor.Application.IntegrationTests; + +using static Testing; - public class TestBase +public class TestBase +{ + [SetUp] + public async Task TestSetUp() { - [SetUp] - public async Task TestSetUp() - { - await ResetState(); - } + await ResetState(); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Testing.cs b/tests/Application.IntegrationTests/Testing.cs index 7a86b2c39..1822ef36b 100644 --- a/tests/Application.IntegrationTests/Testing.cs +++ b/tests/Application.IntegrationTests/Testing.cs @@ -71,10 +71,11 @@ public async Task RunBeforeAnyTests() _scopeFactory = services.BuildServiceProvider().GetService(); - _checkpoint = await Respawner.CreateAsync(_configuration.GetValue("DatabaseSettings:ConnectionString"), new RespawnerOptions - { - TablesToIgnore = new Table[] { "__EFMigrationsHistory" } - }); + _checkpoint = await Respawner.CreateAsync(_configuration.GetValue("DatabaseSettings:ConnectionString"), + new RespawnerOptions + { + TablesToIgnore = new Table[] { "__EFMigrationsHistory" } + }); EnsureDatabase(); } @@ -121,10 +122,7 @@ public static async Task RunAsUserAsync(string userName, string password { var roleManager = scope.ServiceProvider.GetService>(); - foreach (var role in roles) - { - await roleManager.CreateAsync(new IdentityRole(role)); - } + foreach (var role in roles) await roleManager.CreateAsync(new IdentityRole(role)); await userManager.AddToRolesAsync(user, roles); } @@ -184,6 +182,7 @@ public static IPicklistService CreatePicklistService() var scope = _scopeFactory.CreateScope(); return scope.ServiceProvider.GetRequiredService(); } + public static ITenantService CreateTenantsService() { var scope = _scopeFactory.CreateScope(); diff --git a/tests/Application.UnitTests/Application.UnitTests.csproj b/tests/Application.UnitTests/Application.UnitTests.csproj index 478827047..a829d405c 100644 --- a/tests/Application.UnitTests/Application.UnitTests.csproj +++ b/tests/Application.UnitTests/Application.UnitTests.csproj @@ -12,7 +12,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/tests/Application.UnitTests/Common/Behaviours/RequestLoggerTests.cs b/tests/Application.UnitTests/Common/Behaviours/RequestLoggerTests.cs index dbd96be9d..c1ad13f5a 100644 --- a/tests/Application.UnitTests/Common/Behaviours/RequestLoggerTests.cs +++ b/tests/Application.UnitTests/Common/Behaviours/RequestLoggerTests.cs @@ -28,17 +28,19 @@ public async Task ShouldCallGetUserNameAsyncOnceIfAuthenticated() { _currentUserService.Setup(x => x.UserId).Returns("Administrator"); var requestLogger = new LoggingPreProcessor(_logger.Object, _currentUserService.Object); - await requestLogger.Process(new AddEditProductCommand { Brand= "Brand", Name= "Brand", Price=1.0m, Unit="EA" }, new CancellationToken()); + await requestLogger.Process( + new AddEditProductCommand { Brand = "Brand", Name = "Brand", Price = 1.0m, Unit = "EA" }, + new CancellationToken()); _currentUserService.Verify(i => i.UserName, Times.Once); - } [Test] public async Task ShouldNotCallGetUserNameAsyncOnceIfUnauthenticated() { var requestLogger = new LoggingPreProcessor(_logger.Object, _currentUserService.Object); - await requestLogger.Process(new AddEditProductCommand { Brand = "Brand", Name = "Brand", Price = 1.0m, Unit = "EA" }, new CancellationToken()); + await requestLogger.Process( + new AddEditProductCommand { Brand = "Brand", Name = "Brand", Price = 1.0m, Unit = "EA" }, + new CancellationToken()); _identityService.Verify(i => i.GetUserNameAsync(It.IsAny(), CancellationToken.None), Times.Never); - } -} +} \ No newline at end of file diff --git a/tests/Application.UnitTests/Common/Exceptions/ValidationExceptionTests.cs b/tests/Application.UnitTests/Common/Exceptions/ValidationExceptionTests.cs index ffb8245f8..3c265b266 100644 --- a/tests/Application.UnitTests/Common/Exceptions/ValidationExceptionTests.cs +++ b/tests/Application.UnitTests/Common/Exceptions/ValidationExceptionTests.cs @@ -9,15 +9,14 @@ namespace CleanArchitecture.Blazor.Application.UnitTests.Common.Exceptions; public class ValidationExceptionTests { - - [Test] public void SingleValidationFailureCreatesASingleElementErrorDictionary() { var expectedErrorMessage = "'Age' must be over 18"; - var failures = new List { - new ValidationFailure("Age", expectedErrorMessage), + var failures = new List + { + new("Age", expectedErrorMessage) }; var validationException = new ValidationException(failures); var actualErrorMessages = validationException.Errors.Select(x => x.ErrorMessage); @@ -25,24 +24,21 @@ public void SingleValidationFailureCreatesASingleElementErrorDictionary() } [Test] - public void MultipleValidationFailureForMultiplePropertiesCreatesAMultipleElementErrorDictionaryEachWithMultipleValues() + public void + MultipleValidationFailureForMultiplePropertiesCreatesAMultipleElementErrorDictionaryEachWithMultipleValues() { var failures = new List - { - new ValidationFailure("Age", "must be 18 or older"), - new ValidationFailure("Age", "must be 25 or younger"), - new ValidationFailure("Password", "must contain at least 8 characters"), - new ValidationFailure("Password", "must contain a digit"), - new ValidationFailure("Password", "must contain upper case letter"), - new ValidationFailure("Password", "must contain lower case letter"), - }; + { + new("Age", "must be 18 or older"), + new("Age", "must be 25 or younger"), + new("Password", "must contain at least 8 characters"), + new("Password", "must contain a digit"), + new("Password", "must contain upper case letter"), + new("Password", "must contain lower case letter") + }; var actual = new ValidationException(failures).Errors; actual.Should().NotBeEmpty(); - - - } -} - +} \ No newline at end of file diff --git a/tests/Application.UnitTests/Common/Mappings/MappingTests.cs b/tests/Application.UnitTests/Common/Mappings/MappingTests.cs index aae3ed713..06c191fd8 100644 --- a/tests/Application.UnitTests/Common/Mappings/MappingTests.cs +++ b/tests/Application.UnitTests/Common/Mappings/MappingTests.cs @@ -18,7 +18,8 @@ public class MappingTests public MappingTests() { - _configuration = new MapperConfiguration(cfg => cfg.AddMaps(Assembly.GetAssembly(typeof(IApplicationDbContext)))); + _configuration = + new MapperConfiguration(cfg => cfg.AddMaps(Assembly.GetAssembly(typeof(IApplicationDbContext)))); _mapper = _configuration.CreateMapper(); } @@ -32,17 +33,13 @@ public void ShouldHaveValidConfiguration() [TestCase(typeof(Document), typeof(DocumentDto), true)] [TestCase(typeof(KeyValue), typeof(KeyValueDto), true)] [TestCase(typeof(Product), typeof(ProductDto), true)] - public void ShouldSupportMappingFromSourceToDestination(Type source, Type destination, bool inverseMap = false) { var instance = GetInstanceOf(source); _mapper.Map(instance, source, destination); - if (inverseMap) - { - ShouldSupportMappingFromSourceToDestination(destination, source, false); - } + if (inverseMap) ShouldSupportMappingFromSourceToDestination(destination, source); } private object GetInstanceOf(Type type) @@ -53,5 +50,4 @@ private object GetInstanceOf(Type type) // Type without parameterless constructor return FormatterServices.GetUninitializedObject(type); } -} - +} \ No newline at end of file diff --git a/tests/Application.UnitTests/Constants/ConstantStringTests.cs b/tests/Application.UnitTests/Constants/ConstantStringTests.cs index a274db066..fe0f83dd6 100644 --- a/tests/Application.UnitTests/Constants/ConstantStringTests.cs +++ b/tests/Application.UnitTests/Constants/ConstantStringTests.cs @@ -2,6 +2,7 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.UnitTests.Constants; + public class ConstantStringTests { [Test] @@ -39,6 +40,5 @@ public void Test() Assert.Equals("Microsoft", ConstantString.Microsoft); Assert.Equals("Facebook", ConstantString.Facebook); Assert.Equals("Google", ConstantString.Google); - } -} +} \ No newline at end of file diff --git a/tests/Domain.UnitTests/Domain.UnitTests.csproj b/tests/Domain.UnitTests/Domain.UnitTests.csproj index d9c5ec88d..80bab769c 100644 --- a/tests/Domain.UnitTests/Domain.UnitTests.csproj +++ b/tests/Domain.UnitTests/Domain.UnitTests.csproj @@ -13,7 +13,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/tests/Domain.UnitTests/ValueObjects/ColourTests.cs b/tests/Domain.UnitTests/ValueObjects/ColourTests.cs index a455ba5de..e20a086af 100644 --- a/tests/Domain.UnitTests/ValueObjects/ColourTests.cs +++ b/tests/Domain.UnitTests/ValueObjects/ColourTests.cs @@ -9,46 +9,45 @@ namespace CleanArchitecture.Blazor.Domain.UnitTests.ValueObjects; public class ColourTests +{ + [Test] + public void ShouldReturnCorrectColourCode() { - [Test] - public void ShouldReturnCorrectColourCode() - { - const string code = "#FFFFFF"; - - var colour = Colour.From(code); - - colour.Code.Should().Be(code); - } - - [Test] - public void ToStringReturnsCode() - { - var colour = Colour.White; - - colour.ToString().Should().Be(colour.Code); - } - - [Test] - public void ShouldPerformImplicitConversionToColourCodeString() - { - string code = Colour.White; - - code.Should().Be("#FFFFFF"); - } - - [Test] - public void ShouldPerformExplicitConversionGivenSupportedColourCode() - { - var colour = (Colour)"#FFFFFF"; - - colour.Should().Be(Colour.White); - } - - [Test] - public void ShouldThrowUnsupportedColourExceptionGivenNotSupportedColourCode() - { - FluentActions.Invoking(() => Colour.From("##FF33CC")) - .Should().Throw(); - } + const string code = "#FFFFFF"; + + var colour = Colour.From(code); + + colour.Code.Should().Be(code); + } + + [Test] + public void ToStringReturnsCode() + { + var colour = Colour.White; + + colour.ToString().Should().Be(colour.Code); + } + + [Test] + public void ShouldPerformImplicitConversionToColourCodeString() + { + string code = Colour.White; + + code.Should().Be("#FFFFFF"); + } + + [Test] + public void ShouldPerformExplicitConversionGivenSupportedColourCode() + { + var colour = (Colour)"#FFFFFF"; + + colour.Should().Be(Colour.White); } + [Test] + public void ShouldThrowUnsupportedColourExceptionGivenNotSupportedColourCode() + { + FluentActions.Invoking(() => Colour.From("##FF33CC")) + .Should().Throw(); + } +} \ No newline at end of file