recode and add editor config

This commit is contained in:
Amirhossein Mahmoodi
2023-07-31 15:27:34 +03:30
parent 8a3e82bb9a
commit 51228f3c02
88 changed files with 5121 additions and 4138 deletions

485
.editorconfig Normal file
View File

@@ -0,0 +1,485 @@
root = true
[*]
charset = utf-8
end_of_line = crlf
indent_size = 4
indent_style = space
insert_final_newline = false
max_line_length = 120
tab_width = 4
ij_continuation_indent_size = 4
ij_formatter_off_tag = @formatter:off
ij_formatter_on_tag = @formatter:on
ij_formatter_tags_enabled = true
ij_smart_tabs = false
ij_visual_guides = none
ij_wrap_on_typing = false
[*.css]
ij_css_align_closing_brace_with_properties = false
ij_css_blank_lines_around_nested_selector = 1
ij_css_blank_lines_between_blocks = 1
ij_css_block_comment_add_space = false
ij_css_brace_placement = end_of_line
ij_css_enforce_quotes_on_format = false
ij_css_hex_color_long_format = false
ij_css_hex_color_lower_case = false
ij_css_hex_color_short_format = false
ij_css_hex_color_upper_case = false
ij_css_keep_blank_lines_in_code = 2
ij_css_keep_indents_on_empty_lines = false
ij_css_keep_single_line_blocks = false
ij_css_properties_order = font, font-family, font-size, font-weight, font-style, font-variant, font-size-adjust, font-stretch, line-height, position, z-index, top, right, bottom, left, display, visibility, float, clear, overflow, overflow-x, overflow-y, clip, zoom, align-content, align-items, align-self, flex, flex-flow, flex-basis, flex-direction, flex-grow, flex-shrink, flex-wrap, justify-content, order, box-sizing, width, min-width, max-width, height, min-height, max-height, margin, margin-top, margin-right, margin-bottom, margin-left, padding, padding-top, padding-right, padding-bottom, padding-left, table-layout, empty-cells, caption-side, border-spacing, border-collapse, list-style, list-style-position, list-style-type, list-style-image, content, quotes, counter-reset, counter-increment, resize, cursor, user-select, nav-index, nav-up, nav-right, nav-down, nav-left, transition, transition-delay, transition-timing-function, transition-duration, transition-property, transform, transform-origin, animation, animation-name, animation-duration, animation-play-state, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, text-align, text-align-last, vertical-align, white-space, text-decoration, text-emphasis, text-emphasis-color, text-emphasis-style, text-emphasis-position, text-indent, text-justify, letter-spacing, word-spacing, text-outline, text-transform, text-wrap, text-overflow, text-overflow-ellipsis, text-overflow-mode, word-wrap, word-break, tab-size, hyphens, pointer-events, opacity, color, border, border-width, border-style, border-color, border-top, border-top-width, border-top-style, border-top-color, border-right, border-right-width, border-right-style, border-right-color, border-bottom, border-bottom-width, border-bottom-style, border-bottom-color, border-left, border-left-width, border-left-style, border-left-color, border-radius, border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius, border-image, border-image-source, border-image-slice, border-image-width, border-image-outset, border-image-repeat, outline, outline-width, outline-style, outline-color, outline-offset, background, background-color, background-image, background-repeat, background-attachment, background-position, background-position-x, background-position-y, background-clip, background-origin, background-size, box-decoration-break, box-shadow, text-shadow
ij_css_space_after_colon = true
ij_css_space_before_opening_brace = true
ij_css_use_double_quotes = true
ij_css_value_alignment = do_not_align
[*.sass]
indent_size = 2
ij_sass_align_closing_brace_with_properties = false
ij_sass_blank_lines_around_nested_selector = 1
ij_sass_blank_lines_between_blocks = 1
ij_sass_brace_placement = 0
ij_sass_enforce_quotes_on_format = false
ij_sass_hex_color_long_format = false
ij_sass_hex_color_lower_case = false
ij_sass_hex_color_short_format = false
ij_sass_hex_color_upper_case = false
ij_sass_keep_blank_lines_in_code = 2
ij_sass_keep_indents_on_empty_lines = false
ij_sass_keep_single_line_blocks = false
ij_sass_line_comment_add_space = false
ij_sass_line_comment_at_first_column = false
ij_sass_properties_order = font, font-family, font-size, font-weight, font-style, font-variant, font-size-adjust, font-stretch, line-height, position, z-index, top, right, bottom, left, display, visibility, float, clear, overflow, overflow-x, overflow-y, clip, zoom, align-content, align-items, align-self, flex, flex-flow, flex-basis, flex-direction, flex-grow, flex-shrink, flex-wrap, justify-content, order, box-sizing, width, min-width, max-width, height, min-height, max-height, margin, margin-top, margin-right, margin-bottom, margin-left, padding, padding-top, padding-right, padding-bottom, padding-left, table-layout, empty-cells, caption-side, border-spacing, border-collapse, list-style, list-style-position, list-style-type, list-style-image, content, quotes, counter-reset, counter-increment, resize, cursor, user-select, nav-index, nav-up, nav-right, nav-down, nav-left, transition, transition-delay, transition-timing-function, transition-duration, transition-property, transform, transform-origin, animation, animation-name, animation-duration, animation-play-state, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, text-align, text-align-last, vertical-align, white-space, text-decoration, text-emphasis, text-emphasis-color, text-emphasis-style, text-emphasis-position, text-indent, text-justify, letter-spacing, word-spacing, text-outline, text-transform, text-wrap, text-overflow, text-overflow-ellipsis, text-overflow-mode, word-wrap, word-break, tab-size, hyphens, pointer-events, opacity, color, border, border-width, border-style, border-color, border-top, border-top-width, border-top-style, border-top-color, border-right, border-right-width, border-right-style, border-right-color, border-bottom, border-bottom-width, border-bottom-style, border-bottom-color, border-left, border-left-width, border-left-style, border-left-color, border-radius, border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius, border-image, border-image-source, border-image-slice, border-image-width, border-image-outset, border-image-repeat, outline, outline-width, outline-style, outline-color, outline-offset, background, background-color, background-image, background-repeat, background-attachment, background-position, background-position-x, background-position-y, background-clip, background-origin, background-size, box-decoration-break, box-shadow, text-shadow
ij_sass_space_after_colon = true
ij_sass_space_before_opening_brace = true
ij_sass_use_double_quotes = true
ij_sass_value_alignment = 0
[*.scss]
indent_size = 2
ij_scss_align_closing_brace_with_properties = false
ij_scss_blank_lines_around_nested_selector = 1
ij_scss_blank_lines_between_blocks = 1
ij_scss_block_comment_add_space = false
ij_scss_brace_placement = 0
ij_scss_enforce_quotes_on_format = false
ij_scss_hex_color_long_format = false
ij_scss_hex_color_lower_case = false
ij_scss_hex_color_short_format = false
ij_scss_hex_color_upper_case = false
ij_scss_keep_blank_lines_in_code = 2
ij_scss_keep_indents_on_empty_lines = false
ij_scss_keep_single_line_blocks = false
ij_scss_line_comment_add_space = false
ij_scss_line_comment_at_first_column = false
ij_scss_properties_order = font, font-family, font-size, font-weight, font-style, font-variant, font-size-adjust, font-stretch, line-height, position, z-index, top, right, bottom, left, display, visibility, float, clear, overflow, overflow-x, overflow-y, clip, zoom, align-content, align-items, align-self, flex, flex-flow, flex-basis, flex-direction, flex-grow, flex-shrink, flex-wrap, justify-content, order, box-sizing, width, min-width, max-width, height, min-height, max-height, margin, margin-top, margin-right, margin-bottom, margin-left, padding, padding-top, padding-right, padding-bottom, padding-left, table-layout, empty-cells, caption-side, border-spacing, border-collapse, list-style, list-style-position, list-style-type, list-style-image, content, quotes, counter-reset, counter-increment, resize, cursor, user-select, nav-index, nav-up, nav-right, nav-down, nav-left, transition, transition-delay, transition-timing-function, transition-duration, transition-property, transform, transform-origin, animation, animation-name, animation-duration, animation-play-state, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, text-align, text-align-last, vertical-align, white-space, text-decoration, text-emphasis, text-emphasis-color, text-emphasis-style, text-emphasis-position, text-indent, text-justify, letter-spacing, word-spacing, text-outline, text-transform, text-wrap, text-overflow, text-overflow-ellipsis, text-overflow-mode, word-wrap, word-break, tab-size, hyphens, pointer-events, opacity, color, border, border-width, border-style, border-color, border-top, border-top-width, border-top-style, border-top-color, border-right, border-right-width, border-right-style, border-right-color, border-bottom, border-bottom-width, border-bottom-style, border-bottom-color, border-left, border-left-width, border-left-style, border-left-color, border-radius, border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius, border-image, border-image-source, border-image-slice, border-image-width, border-image-outset, border-image-repeat, outline, outline-width, outline-style, outline-color, outline-offset, background, background-color, background-image, background-repeat, background-attachment, background-position, background-position-x, background-position-y, background-clip, background-origin, background-size, box-decoration-break, box-shadow, text-shadow
ij_scss_space_after_colon = true
ij_scss_space_before_opening_brace = true
ij_scss_use_double_quotes = true
ij_scss_value_alignment = 0
[{*.ats,*.cts,*.mts,*.ts}]
ij_continuation_indent_size = 4
ij_typescript_align_imports = false
ij_typescript_align_multiline_array_initializer_expression = false
ij_typescript_align_multiline_binary_operation = false
ij_typescript_align_multiline_chained_methods = false
ij_typescript_align_multiline_extends_list = false
ij_typescript_align_multiline_for = true
ij_typescript_align_multiline_parameters = true
ij_typescript_align_multiline_parameters_in_calls = false
ij_typescript_align_multiline_ternary_operation = false
ij_typescript_align_object_properties = 0
ij_typescript_align_union_types = false
ij_typescript_align_var_statements = 0
ij_typescript_array_initializer_new_line_after_left_brace = false
ij_typescript_array_initializer_right_brace_on_new_line = false
ij_typescript_array_initializer_wrap = off
ij_typescript_assignment_wrap = off
ij_typescript_binary_operation_sign_on_next_line = false
ij_typescript_binary_operation_wrap = off
ij_typescript_blacklist_imports = rxjs/Rx, node_modules/**, **/node_modules/**, @angular/material, @angular/material/typings/**
ij_typescript_blank_lines_after_imports = 1
ij_typescript_blank_lines_around_class = 1
ij_typescript_blank_lines_around_field = 0
ij_typescript_blank_lines_around_field_in_interface = 0
ij_typescript_blank_lines_around_function = 1
ij_typescript_blank_lines_around_method = 1
ij_typescript_blank_lines_around_method_in_interface = 1
ij_typescript_block_brace_style = end_of_line
ij_typescript_block_comment_add_space = false
ij_typescript_block_comment_at_first_column = true
ij_typescript_call_parameters_new_line_after_left_paren = false
ij_typescript_call_parameters_right_paren_on_new_line = false
ij_typescript_call_parameters_wrap = off
ij_typescript_catch_on_new_line = false
ij_typescript_chained_call_dot_on_new_line = true
ij_typescript_class_brace_style = end_of_line
ij_typescript_comma_on_new_line = false
ij_typescript_do_while_brace_force = never
ij_typescript_else_on_new_line = false
ij_typescript_enforce_trailing_comma = keep
ij_typescript_enum_constants_wrap = on_every_item
ij_typescript_extends_keyword_wrap = off
ij_typescript_extends_list_wrap = off
ij_typescript_field_prefix = _
ij_typescript_file_name_style = relaxed
ij_typescript_finally_on_new_line = false
ij_typescript_for_brace_force = never
ij_typescript_for_statement_new_line_after_left_paren = false
ij_typescript_for_statement_right_paren_on_new_line = false
ij_typescript_for_statement_wrap = off
ij_typescript_force_quote_style = false
ij_typescript_force_semicolon_style = false
ij_typescript_function_expression_brace_style = end_of_line
ij_typescript_if_brace_force = never
ij_typescript_import_merge_members = global
ij_typescript_import_prefer_absolute_path = global
ij_typescript_import_sort_members = true
ij_typescript_import_sort_module_name = false
ij_typescript_import_use_node_resolution = true
ij_typescript_imports_wrap = on_every_item
ij_typescript_indent_case_from_switch = true
ij_typescript_indent_chained_calls = true
ij_typescript_indent_package_children = 0
ij_typescript_jsdoc_include_types = false
ij_typescript_jsx_attribute_value = braces
ij_typescript_keep_blank_lines_in_code = 2
ij_typescript_keep_first_column_comment = true
ij_typescript_keep_indents_on_empty_lines = false
ij_typescript_keep_line_breaks = true
ij_typescript_keep_simple_blocks_in_one_line = false
ij_typescript_keep_simple_methods_in_one_line = false
ij_typescript_line_comment_add_space = true
ij_typescript_line_comment_at_first_column = false
ij_typescript_method_brace_style = end_of_line
ij_typescript_method_call_chain_wrap = off
ij_typescript_method_parameters_new_line_after_left_paren = false
ij_typescript_method_parameters_right_paren_on_new_line = false
ij_typescript_method_parameters_wrap = off
ij_typescript_object_literal_wrap = on_every_item
ij_typescript_object_types_wrap = on_every_item
ij_typescript_parentheses_expression_new_line_after_left_paren = false
ij_typescript_parentheses_expression_right_paren_on_new_line = false
ij_typescript_place_assignment_sign_on_next_line = false
ij_typescript_prefer_as_type_cast = false
ij_typescript_prefer_explicit_types_function_expression_returns = false
ij_typescript_prefer_explicit_types_function_returns = false
ij_typescript_prefer_explicit_types_vars_fields = false
ij_typescript_prefer_parameters_wrap = false
ij_typescript_reformat_c_style_comments = false
ij_typescript_space_after_colon = true
ij_typescript_space_after_comma = true
ij_typescript_space_after_dots_in_rest_parameter = false
ij_typescript_space_after_generator_mult = true
ij_typescript_space_after_property_colon = true
ij_typescript_space_after_quest = true
ij_typescript_space_after_type_colon = true
ij_typescript_space_after_unary_not = false
ij_typescript_space_before_async_arrow_lparen = true
ij_typescript_space_before_catch_keyword = true
ij_typescript_space_before_catch_left_brace = true
ij_typescript_space_before_catch_parentheses = true
ij_typescript_space_before_class_lbrace = true
ij_typescript_space_before_class_left_brace = true
ij_typescript_space_before_colon = true
ij_typescript_space_before_comma = false
ij_typescript_space_before_do_left_brace = true
ij_typescript_space_before_else_keyword = true
ij_typescript_space_before_else_left_brace = true
ij_typescript_space_before_finally_keyword = true
ij_typescript_space_before_finally_left_brace = true
ij_typescript_space_before_for_left_brace = true
ij_typescript_space_before_for_parentheses = true
ij_typescript_space_before_for_semicolon = false
ij_typescript_space_before_function_left_parenth = true
ij_typescript_space_before_generator_mult = false
ij_typescript_space_before_if_left_brace = true
ij_typescript_space_before_if_parentheses = true
ij_typescript_space_before_method_call_parentheses = false
ij_typescript_space_before_method_left_brace = true
ij_typescript_space_before_method_parentheses = false
ij_typescript_space_before_property_colon = false
ij_typescript_space_before_quest = true
ij_typescript_space_before_switch_left_brace = true
ij_typescript_space_before_switch_parentheses = true
ij_typescript_space_before_try_left_brace = true
ij_typescript_space_before_type_colon = false
ij_typescript_space_before_unary_not = false
ij_typescript_space_before_while_keyword = true
ij_typescript_space_before_while_left_brace = true
ij_typescript_space_before_while_parentheses = true
ij_typescript_spaces_around_additive_operators = true
ij_typescript_spaces_around_arrow_function_operator = true
ij_typescript_spaces_around_assignment_operators = true
ij_typescript_spaces_around_bitwise_operators = true
ij_typescript_spaces_around_equality_operators = true
ij_typescript_spaces_around_logical_operators = true
ij_typescript_spaces_around_multiplicative_operators = true
ij_typescript_spaces_around_relational_operators = true
ij_typescript_spaces_around_shift_operators = true
ij_typescript_spaces_around_unary_operator = false
ij_typescript_spaces_within_array_initializer_brackets = false
ij_typescript_spaces_within_brackets = false
ij_typescript_spaces_within_catch_parentheses = false
ij_typescript_spaces_within_for_parentheses = false
ij_typescript_spaces_within_if_parentheses = false
ij_typescript_spaces_within_imports = false
ij_typescript_spaces_within_interpolation_expressions = false
ij_typescript_spaces_within_method_call_parentheses = false
ij_typescript_spaces_within_method_parentheses = false
ij_typescript_spaces_within_object_literal_braces = false
ij_typescript_spaces_within_object_type_braces = true
ij_typescript_spaces_within_parentheses = false
ij_typescript_spaces_within_switch_parentheses = false
ij_typescript_spaces_within_type_assertion = false
ij_typescript_spaces_within_union_types = true
ij_typescript_spaces_within_while_parentheses = false
ij_typescript_special_else_if_treatment = true
ij_typescript_ternary_operation_signs_on_next_line = false
ij_typescript_ternary_operation_wrap = off
ij_typescript_union_types_wrap = on_every_item
ij_typescript_use_chained_calls_group_indents = false
ij_typescript_use_double_quotes = true
ij_typescript_use_explicit_js_extension = auto
ij_typescript_use_path_mapping = always
ij_typescript_use_public_modifier = false
ij_typescript_use_semicolon_after_statement = true
ij_typescript_var_declaration_wrap = normal
ij_typescript_while_brace_force = never
ij_typescript_while_on_new_line = false
ij_typescript_wrap_comments = false
[{*.cjs,*.js}]
ij_continuation_indent_size = 4
ij_javascript_align_imports = false
ij_javascript_align_multiline_array_initializer_expression = false
ij_javascript_align_multiline_binary_operation = false
ij_javascript_align_multiline_chained_methods = false
ij_javascript_align_multiline_extends_list = false
ij_javascript_align_multiline_for = true
ij_javascript_align_multiline_parameters = true
ij_javascript_align_multiline_parameters_in_calls = false
ij_javascript_align_multiline_ternary_operation = false
ij_javascript_align_object_properties = 0
ij_javascript_align_union_types = false
ij_javascript_align_var_statements = 0
ij_javascript_array_initializer_new_line_after_left_brace = false
ij_javascript_array_initializer_right_brace_on_new_line = false
ij_javascript_array_initializer_wrap = off
ij_javascript_assignment_wrap = off
ij_javascript_binary_operation_sign_on_next_line = false
ij_javascript_binary_operation_wrap = off
ij_javascript_blacklist_imports = rxjs/Rx, node_modules/**, **/node_modules/**, @angular/material, @angular/material/typings/**
ij_javascript_blank_lines_after_imports = 1
ij_javascript_blank_lines_around_class = 1
ij_javascript_blank_lines_around_field = 0
ij_javascript_blank_lines_around_function = 1
ij_javascript_blank_lines_around_method = 1
ij_javascript_block_brace_style = end_of_line
ij_javascript_block_comment_add_space = false
ij_javascript_block_comment_at_first_column = true
ij_javascript_call_parameters_new_line_after_left_paren = false
ij_javascript_call_parameters_right_paren_on_new_line = false
ij_javascript_call_parameters_wrap = off
ij_javascript_catch_on_new_line = false
ij_javascript_chained_call_dot_on_new_line = true
ij_javascript_class_brace_style = end_of_line
ij_javascript_comma_on_new_line = false
ij_javascript_do_while_brace_force = never
ij_javascript_else_on_new_line = false
ij_javascript_enforce_trailing_comma = keep
ij_javascript_extends_keyword_wrap = off
ij_javascript_extends_list_wrap = off
ij_javascript_field_prefix = _
ij_javascript_file_name_style = relaxed
ij_javascript_finally_on_new_line = false
ij_javascript_for_brace_force = never
ij_javascript_for_statement_new_line_after_left_paren = false
ij_javascript_for_statement_right_paren_on_new_line = false
ij_javascript_for_statement_wrap = off
ij_javascript_force_quote_style = false
ij_javascript_force_semicolon_style = false
ij_javascript_function_expression_brace_style = end_of_line
ij_javascript_if_brace_force = never
ij_javascript_import_merge_members = global
ij_javascript_import_prefer_absolute_path = global
ij_javascript_import_sort_members = true
ij_javascript_import_sort_module_name = false
ij_javascript_import_use_node_resolution = true
ij_javascript_imports_wrap = on_every_item
ij_javascript_indent_case_from_switch = true
ij_javascript_indent_chained_calls = true
ij_javascript_indent_package_children = 0
ij_javascript_jsx_attribute_value = braces
ij_javascript_keep_blank_lines_in_code = 2
ij_javascript_keep_first_column_comment = true
ij_javascript_keep_indents_on_empty_lines = false
ij_javascript_keep_line_breaks = true
ij_javascript_keep_simple_blocks_in_one_line = false
ij_javascript_keep_simple_methods_in_one_line = false
ij_javascript_line_comment_add_space = true
ij_javascript_line_comment_at_first_column = false
ij_javascript_method_brace_style = end_of_line
ij_javascript_method_call_chain_wrap = off
ij_javascript_method_parameters_new_line_after_left_paren = false
ij_javascript_method_parameters_right_paren_on_new_line = false
ij_javascript_method_parameters_wrap = off
ij_javascript_object_literal_wrap = on_every_item
ij_javascript_object_types_wrap = on_every_item
ij_javascript_parentheses_expression_new_line_after_left_paren = false
ij_javascript_parentheses_expression_right_paren_on_new_line = false
ij_javascript_place_assignment_sign_on_next_line = false
ij_javascript_prefer_as_type_cast = false
ij_javascript_prefer_explicit_types_function_expression_returns = false
ij_javascript_prefer_explicit_types_function_returns = false
ij_javascript_prefer_explicit_types_vars_fields = false
ij_javascript_prefer_parameters_wrap = false
ij_javascript_reformat_c_style_comments = false
ij_javascript_space_after_colon = true
ij_javascript_space_after_comma = true
ij_javascript_space_after_dots_in_rest_parameter = false
ij_javascript_space_after_generator_mult = true
ij_javascript_space_after_property_colon = true
ij_javascript_space_after_quest = true
ij_javascript_space_after_type_colon = true
ij_javascript_space_after_unary_not = false
ij_javascript_space_before_async_arrow_lparen = true
ij_javascript_space_before_catch_keyword = true
ij_javascript_space_before_catch_left_brace = true
ij_javascript_space_before_catch_parentheses = true
ij_javascript_space_before_class_lbrace = true
ij_javascript_space_before_class_left_brace = true
ij_javascript_space_before_colon = true
ij_javascript_space_before_comma = false
ij_javascript_space_before_do_left_brace = true
ij_javascript_space_before_else_keyword = true
ij_javascript_space_before_else_left_brace = true
ij_javascript_space_before_finally_keyword = true
ij_javascript_space_before_finally_left_brace = true
ij_javascript_space_before_for_left_brace = true
ij_javascript_space_before_for_parentheses = true
ij_javascript_space_before_for_semicolon = false
ij_javascript_space_before_function_left_parenth = true
ij_javascript_space_before_generator_mult = false
ij_javascript_space_before_if_left_brace = true
ij_javascript_space_before_if_parentheses = true
ij_javascript_space_before_method_call_parentheses = false
ij_javascript_space_before_method_left_brace = true
ij_javascript_space_before_method_parentheses = false
ij_javascript_space_before_property_colon = false
ij_javascript_space_before_quest = true
ij_javascript_space_before_switch_left_brace = true
ij_javascript_space_before_switch_parentheses = true
ij_javascript_space_before_try_left_brace = true
ij_javascript_space_before_type_colon = false
ij_javascript_space_before_unary_not = false
ij_javascript_space_before_while_keyword = true
ij_javascript_space_before_while_left_brace = true
ij_javascript_space_before_while_parentheses = true
ij_javascript_spaces_around_additive_operators = true
ij_javascript_spaces_around_arrow_function_operator = true
ij_javascript_spaces_around_assignment_operators = true
ij_javascript_spaces_around_bitwise_operators = true
ij_javascript_spaces_around_equality_operators = true
ij_javascript_spaces_around_logical_operators = true
ij_javascript_spaces_around_multiplicative_operators = true
ij_javascript_spaces_around_relational_operators = true
ij_javascript_spaces_around_shift_operators = true
ij_javascript_spaces_around_unary_operator = false
ij_javascript_spaces_within_array_initializer_brackets = false
ij_javascript_spaces_within_brackets = false
ij_javascript_spaces_within_catch_parentheses = false
ij_javascript_spaces_within_for_parentheses = false
ij_javascript_spaces_within_if_parentheses = false
ij_javascript_spaces_within_imports = false
ij_javascript_spaces_within_interpolation_expressions = false
ij_javascript_spaces_within_method_call_parentheses = false
ij_javascript_spaces_within_method_parentheses = false
ij_javascript_spaces_within_object_literal_braces = false
ij_javascript_spaces_within_object_type_braces = true
ij_javascript_spaces_within_parentheses = false
ij_javascript_spaces_within_switch_parentheses = false
ij_javascript_spaces_within_type_assertion = false
ij_javascript_spaces_within_union_types = true
ij_javascript_spaces_within_while_parentheses = false
ij_javascript_special_else_if_treatment = true
ij_javascript_ternary_operation_signs_on_next_line = false
ij_javascript_ternary_operation_wrap = off
ij_javascript_union_types_wrap = on_every_item
ij_javascript_use_chained_calls_group_indents = false
ij_javascript_use_double_quotes = true
ij_javascript_use_explicit_js_extension = auto
ij_javascript_use_path_mapping = always
ij_javascript_use_public_modifier = false
ij_javascript_use_semicolon_after_statement = true
ij_javascript_var_declaration_wrap = normal
ij_javascript_while_brace_force = never
ij_javascript_while_on_new_line = false
ij_javascript_wrap_comments = false
[{*.har,*.jsb2,*.jsb3,*.json,.babelrc,.eslintrc,.prettierrc,.stylelintrc,bowerrc,jest.config}]
indent_size = 2
ij_json_array_wrapping = split_into_lines
ij_json_keep_blank_lines_in_code = 0
ij_json_keep_indents_on_empty_lines = false
ij_json_keep_line_breaks = true
ij_json_keep_trailing_comma = false
ij_json_object_wrapping = split_into_lines
ij_json_property_alignment = do_not_align
ij_json_space_after_colon = true
ij_json_space_after_comma = true
ij_json_space_before_colon = false
ij_json_space_before_comma = false
ij_json_spaces_within_braces = false
ij_json_spaces_within_brackets = false
ij_json_wrap_long_lines = false
[{*.htm,*.html,*.ng,*.sht,*.shtm,*.shtml}]
ij_html_add_new_line_before_tags = body, div, p, form, h1, h2, h3
ij_html_align_attributes = true
ij_html_align_text = false
ij_html_attribute_wrap = normal
ij_html_block_comment_add_space = false
ij_html_block_comment_at_first_column = true
ij_html_do_not_align_children_of_min_lines = 0
ij_html_do_not_break_if_inline_tags = title, h1, h2, h3, h4, h5, h6, p
ij_html_do_not_indent_children_of_tags = html, body, thead, tbody, tfoot
ij_html_enforce_quotes = false
ij_html_inline_tags = a, abbr, acronym, b, basefont, bdo, big, br, cite, cite, code, dfn, em, font, i, img, input, kbd, label, q, s, samp, select, small, span, strike, strong, sub, sup, textarea, tt, u, var
ij_html_keep_blank_lines = 2
ij_html_keep_indents_on_empty_lines = false
ij_html_keep_line_breaks = true
ij_html_keep_line_breaks_in_text = true
ij_html_keep_whitespaces = false
ij_html_keep_whitespaces_inside = span, pre, textarea
ij_html_line_comment_at_first_column = true
ij_html_new_line_after_last_attribute = never
ij_html_new_line_before_first_attribute = never
ij_html_quote_style = double
ij_html_remove_new_line_before_tags = br
ij_html_space_after_tag_name = false
ij_html_space_around_equality_in_attribute = false
ij_html_space_inside_empty_tag = false
ij_html_text_wrap = normal
[{*.markdown,*.md}]
ij_markdown_force_one_space_after_blockquote_symbol = true
ij_markdown_force_one_space_after_header_symbol = true
ij_markdown_force_one_space_after_list_bullet = true
ij_markdown_force_one_space_between_words = true
ij_markdown_format_tables = true
ij_markdown_insert_quote_arrows_on_wrap = true
ij_markdown_keep_indents_on_empty_lines = false
ij_markdown_keep_line_breaks_inside_text_blocks = true
ij_markdown_max_lines_around_block_elements = 1
ij_markdown_max_lines_around_header = 1
ij_markdown_max_lines_between_paragraphs = 1
ij_markdown_min_lines_around_block_elements = 1
ij_markdown_min_lines_around_header = 1
ij_markdown_min_lines_between_paragraphs = 1
ij_markdown_wrap_text_if_long = true
ij_markdown_wrap_text_inside_blockquotes = true

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
node_modules
.next
.env.local
.idea

View File

@@ -1,17 +1,18 @@
# loan-facilities-user
## Getting started
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
Already a pro? Just edit this README.md and make it your own. Want to make it
easy? [Use the template at the bottom](#editing-this-readme)!
## Add your files
- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file)
or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line)
or push an existing Git repository with the following command:
```
cd existing_repo
@@ -46,47 +47,82 @@ Use the built-in continuous integration in GitLab.
# Editing this README
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template.
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to
structure it however you want - this is just a starting point!). Thank you
to [makeareadme.com](https://www.makeareadme.com/) for this template.
## Suggestions for a good README
Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
Every project is different, so consider which of these sections apply to yours. The sections used in the template are
suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long
is better than too short. If you think your README is too long, consider utilizing another form of documentation rather
than cutting out information.
## Name
Choose a self-explaining name for your project.
## Description
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be
unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your
project, this is a good place to list differentiating factors.
## Badges
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the
project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
## Visuals
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see
GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
## Installation
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew.
However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing
specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a
specific context like a particular programming language version or operating system or has dependencies that have to be
installed manually, also add a Requirements subsection.
## Usage
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of
usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably
include in the README.
## Support
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address,
etc.
## Roadmap
If you have ideas for releases in the future, it is a good idea to list them in the README.
## Contributing
State if you are open to contributions and what your requirements are for accepting them.
For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
For people who want to make changes to your project, it's helpful to have some documentation on how to get started.
Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps
explicit. These instructions could also be useful to your future self.
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce
the likelihood that the changes inadvertently break something. Having instructions for running tests is especially
helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
## Authors and acknowledgment
Show your appreciation to those who have contributed to the project.
## License
For open source projects, say how it is licensed.
## Project status
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
If you have run out of energy or time for your project, put a note at the top of the README saying that development has
slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or
owner, allowing your project to keep going. You can also make an explicit request for maintainers.

View File

@@ -1,8 +1,12 @@
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"],
"&/*": ["./public/*"],
"@/*": [
"./src/*"
],
"&/*": [
"./public/*"
]
}
}
}

View File

@@ -26,6 +26,7 @@ This set of fonts are used in this project under the license: (.....)
url('./fonts/woff/IRANSansWeb_Black.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
url('./fonts/ttf/IRANSansWeb_Black.ttf') format('truetype');
}
@font-face {
font-family: IRANSans;
font-style: normal;
@@ -36,6 +37,7 @@ This set of fonts are used in this project under the license: (.....)
url('./fonts/woff/IRANSansWeb_Bold.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
url('./fonts/ttf/IRANSansWeb_Bold.ttf') format('truetype');
}
@font-face {
font-family: IRANSans;
font-style: normal;
@@ -46,6 +48,7 @@ This set of fonts are used in this project under the license: (.....)
url('./fonts/woff/IRANSansWeb_Medium.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
url('./fonts/ttf/IRANSansWeb_Medium.ttf') format('truetype');
}
@font-face {
font-family: IRANSans;
font-style: normal;
@@ -56,6 +59,7 @@ This set of fonts are used in this project under the license: (.....)
url('./fonts/woff/IRANSansWeb_Light.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
url('./fonts/ttf/IRANSansWeb_Light.ttf') format('truetype');
}
@font-face {
font-family: IRANSans;
font-style: normal;
@@ -66,6 +70,7 @@ This set of fonts are used in this project under the license: (.....)
url('./fonts/woff/IRANSansWeb_UltraLight.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
url('./fonts/ttf/IRANSansWeb_UltraLight.ttf') format('truetype');
}
@font-face {
font-family: IRANSans;
font-style: normal;
@@ -76,6 +81,7 @@ This set of fonts are used in this project under the license: (.....)
url('./fonts/woff/IRANSansWeb.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
url('./fonts/ttf/IRANSansWeb.ttf') format('truetype');
}
@font-face {
font-family: Parastoo;
font-style: normal;
@@ -85,6 +91,7 @@ This set of fonts are used in this project under the license: (.....)
url('./fonts/woff/Parastoo.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
url('./fonts/ttf/Parastoo.ttf') format('truetype');
}
@font-face {
font-family: Parastoo;
font-style: normal;

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -1 +1,42 @@
<svg xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" width="430.91406" height="559.70956" viewBox="0 0 430.91406 559.70956" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M689.29823,324.68445q0,4.785-.31006,9.49a143.75442,143.75442,0,0,1-13.46973,52.19c-.06006.14-.13037.27-.18994.4-.36035.76-.73047,1.52-1.11035,2.27a142.03868,142.03868,0,0,1-7.6499,13.5,144.462,144.462,0,0,1-118.56006,66.72l1.43018,82.24,18.6499-9.82,3.33008,6.33-21.83985,11.5,2.66992,152.74.02979,2.04-14.41992,1.21.02978-.05,4.54-246.18a144.17482,144.17482,0,0,1-102-44.38c-.90967-.94-1.81006-1.91-2.68994-2.87-.04-.04-.06982-.08-.1001-.11a144.76758,144.76758,0,0,1-26.33984-40.76c.14014.16.29.31.43017.47a144.642,144.642,0,0,1,68.57959-186.38c.5-.25,1.01026-.49,1.51026-.74a144.75207,144.75207,0,0,1,187.52978,56.93c.88037,1.48005,1.73047,2.99006,2.5503,4.51A143.85218,143.85218,0,0,1,689.29823,324.68445Z" transform="translate(-384.54297 -170.14522)" fill="#e5e5e5"/><circle cx="198.2848" cy="502.61836" r="43.06733" fill="#2f2e41"/><rect x="210.6027" y="532.22265" width="38.58356" height="13.08374" fill="#2f2e41"/><ellipse cx="249.45884" cy="534.4033" rx="4.08868" ry="10.90314" fill="#2f2e41"/><rect x="201.6027" y="531.22265" width="38.58356" height="13.08374" fill="#2f2e41"/><ellipse cx="240.45884" cy="533.4033" rx="4.08868" ry="10.90314" fill="#2f2e41"/><path d="M541.051,632.71229c-3.47748-15.5738,7.63866-31.31043,24.82866-35.14881s33.94421,5.67511,37.42169,21.2489-7.91492,21.31769-25.10486,25.156S544.5285,648.28608,541.051,632.71229Z" transform="translate(-384.54297 -170.14522)" fill="#084070"/><path d="M599.38041,670.31119a10.75135,10.75135,0,0,1-10.33984-7.12305,1,1,0,0,1,1.896-.63672c1.51416,4.50782,6.69825,6.86524,11.55457,5.25342a9.60826,9.60826,0,0,0,5.57251-4.74756,8.23152,8.23152,0,0,0,.48547-6.33789,1,1,0,0,1,1.896-.63672,10.217,10.217,0,0,1-.59229,7.86817,11.62362,11.62362,0,0,1-6.73218,5.75244A11.87976,11.87976,0,0,1,599.38041,670.31119Z" transform="translate(-384.54297 -170.14522)" fill="#fff"/><path d="M618.56452,676.16463a9.57244,9.57244,0,1,1-17.04506,8.71737h0l-.00855-.01674c-2.40264-4.70921.91734-7.63227,5.62657-10.03485S616.162,671.45547,618.56452,676.16463Z" transform="translate(-384.54297 -170.14522)" fill="#fff"/><path d="M772.27559,716.2189h-381a1,1,0,0,1,0-2h381a1,1,0,0,1,0,2Z" transform="translate(-384.54297 -170.14522)" fill="#3f3d56"/><ellipse cx="567.22606" cy="706.64241" rx="7.50055" ry="23.89244" transform="translate(-543.03826 -6.10526) rotate(-14.4613)" fill="#2f2e41"/><path d="M645.50888,621.42349H629.12323a.77274.77274,0,0,1-.51881-1.3455l14.90017-13.49467h-13.7669a.77274.77274,0,0,1,0-1.54548h15.77119a.77275.77275,0,0,1,.51881,1.34551L631.12753,619.878h14.38135a.77274.77274,0,1,1,0,1.54548Z" transform="translate(-384.54297 -170.14522)" fill="#cbcbcb"/><path d="M666.37288,597.46853H649.98723a.77275.77275,0,0,1-.51881-1.34551l14.90017-13.49466h-13.7669a.77274.77274,0,0,1,0-1.54548h15.77119a.77274.77274,0,0,1,.51881,1.3455l-14.90016,13.49467h14.38135a.77274.77274,0,1,1,0,1.54548Z" transform="translate(-384.54297 -170.14522)" fill="#cbcbcb"/><path d="M657.1,571.19534H640.71434a.77274.77274,0,0,1-.51881-1.3455l14.90017-13.49467H641.3288a.77274.77274,0,0,1,0-1.54548H657.1a.77275.77275,0,0,1,.51881,1.34551l-14.90016,13.49466H657.1a.77274.77274,0,0,1,0,1.54548Z" transform="translate(-384.54297 -170.14522)" fill="#cbcbcb"/><path d="M770.66217,347.522,783.457,337.28854c-9.93976-1.09662-14.0238,4.32429-15.69525,8.615-7.76532-3.22446-16.21881,1.00136-16.21881,1.00136l25.6001,9.29375A19.37209,19.37209,0,0,0,770.66217,347.522Z" transform="translate(-384.54297 -170.14522)" fill="#3f3d56"/><path d="M403.66217,180.522,416.457,170.28854c-9.93976-1.09662-14.0238,4.32429-15.69525,8.615-7.76532-3.22446-16.21881,1.00136-16.21881,1.00136l25.6001,9.29375A19.37209,19.37209,0,0,0,403.66217,180.522Z" transform="translate(-384.54297 -170.14522)" fill="#3f3d56"/><path d="M802.66217,215.522,815.457,205.28854c-9.93976-1.09662-14.0238,4.32429-15.69525,8.615-7.76532-3.22446-16.21881,1.00136-16.21881,1.00136l25.6001,9.29375A19.37209,19.37209,0,0,0,802.66217,215.522Z" transform="translate(-384.54297 -170.14522)" fill="#3f3d56"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" width="430.91406" height="559.70956"
viewBox="0 0 430.91406 559.70956">
<path
d="M689.29823,324.68445q0,4.785-.31006,9.49a143.75442,143.75442,0,0,1-13.46973,52.19c-.06006.14-.13037.27-.18994.4-.36035.76-.73047,1.52-1.11035,2.27a142.03868,142.03868,0,0,1-7.6499,13.5,144.462,144.462,0,0,1-118.56006,66.72l1.43018,82.24,18.6499-9.82,3.33008,6.33-21.83985,11.5,2.66992,152.74.02979,2.04-14.41992,1.21.02978-.05,4.54-246.18a144.17482,144.17482,0,0,1-102-44.38c-.90967-.94-1.81006-1.91-2.68994-2.87-.04-.04-.06982-.08-.1001-.11a144.76758,144.76758,0,0,1-26.33984-40.76c.14014.16.29.31.43017.47a144.642,144.642,0,0,1,68.57959-186.38c.5-.25,1.01026-.49,1.51026-.74a144.75207,144.75207,0,0,1,187.52978,56.93c.88037,1.48005,1.73047,2.99006,2.5503,4.51A143.85218,143.85218,0,0,1,689.29823,324.68445Z"
transform="translate(-384.54297 -170.14522)" fill="#e5e5e5"/>
<circle cx="198.2848" cy="502.61836" r="43.06733" fill="#2f2e41"/>
<rect x="210.6027" y="532.22265" width="38.58356" height="13.08374" fill="#2f2e41"/>
<ellipse cx="249.45884" cy="534.4033" rx="4.08868" ry="10.90314" fill="#2f2e41"/>
<rect x="201.6027" y="531.22265" width="38.58356" height="13.08374" fill="#2f2e41"/>
<ellipse cx="240.45884" cy="533.4033" rx="4.08868" ry="10.90314" fill="#2f2e41"/>
<path
d="M541.051,632.71229c-3.47748-15.5738,7.63866-31.31043,24.82866-35.14881s33.94421,5.67511,37.42169,21.2489-7.91492,21.31769-25.10486,25.156S544.5285,648.28608,541.051,632.71229Z"
transform="translate(-384.54297 -170.14522)" fill="#084070"/>
<path
d="M599.38041,670.31119a10.75135,10.75135,0,0,1-10.33984-7.12305,1,1,0,0,1,1.896-.63672c1.51416,4.50782,6.69825,6.86524,11.55457,5.25342a9.60826,9.60826,0,0,0,5.57251-4.74756,8.23152,8.23152,0,0,0,.48547-6.33789,1,1,0,0,1,1.896-.63672,10.217,10.217,0,0,1-.59229,7.86817,11.62362,11.62362,0,0,1-6.73218,5.75244A11.87976,11.87976,0,0,1,599.38041,670.31119Z"
transform="translate(-384.54297 -170.14522)" fill="#fff"/>
<path
d="M618.56452,676.16463a9.57244,9.57244,0,1,1-17.04506,8.71737h0l-.00855-.01674c-2.40264-4.70921.91734-7.63227,5.62657-10.03485S616.162,671.45547,618.56452,676.16463Z"
transform="translate(-384.54297 -170.14522)" fill="#fff"/>
<path d="M772.27559,716.2189h-381a1,1,0,0,1,0-2h381a1,1,0,0,1,0,2Z" transform="translate(-384.54297 -170.14522)"
fill="#3f3d56"/>
<ellipse cx="567.22606" cy="706.64241" rx="7.50055" ry="23.89244"
transform="translate(-543.03826 -6.10526) rotate(-14.4613)" fill="#2f2e41"/>
<path
d="M645.50888,621.42349H629.12323a.77274.77274,0,0,1-.51881-1.3455l14.90017-13.49467h-13.7669a.77274.77274,0,0,1,0-1.54548h15.77119a.77275.77275,0,0,1,.51881,1.34551L631.12753,619.878h14.38135a.77274.77274,0,1,1,0,1.54548Z"
transform="translate(-384.54297 -170.14522)" fill="#cbcbcb"/>
<path
d="M666.37288,597.46853H649.98723a.77275.77275,0,0,1-.51881-1.34551l14.90017-13.49466h-13.7669a.77274.77274,0,0,1,0-1.54548h15.77119a.77274.77274,0,0,1,.51881,1.3455l-14.90016,13.49467h14.38135a.77274.77274,0,1,1,0,1.54548Z"
transform="translate(-384.54297 -170.14522)" fill="#cbcbcb"/>
<path
d="M657.1,571.19534H640.71434a.77274.77274,0,0,1-.51881-1.3455l14.90017-13.49467H641.3288a.77274.77274,0,0,1,0-1.54548H657.1a.77275.77275,0,0,1,.51881,1.34551l-14.90016,13.49466H657.1a.77274.77274,0,0,1,0,1.54548Z"
transform="translate(-384.54297 -170.14522)" fill="#cbcbcb"/>
<path
d="M770.66217,347.522,783.457,337.28854c-9.93976-1.09662-14.0238,4.32429-15.69525,8.615-7.76532-3.22446-16.21881,1.00136-16.21881,1.00136l25.6001,9.29375A19.37209,19.37209,0,0,0,770.66217,347.522Z"
transform="translate(-384.54297 -170.14522)" fill="#3f3d56"/>
<path
d="M403.66217,180.522,416.457,170.28854c-9.93976-1.09662-14.0238,4.32429-15.69525,8.615-7.76532-3.22446-16.21881,1.00136-16.21881,1.00136l25.6001,9.29375A19.37209,19.37209,0,0,0,403.66217,180.522Z"
transform="translate(-384.54297 -170.14522)" fill="#3f3d56"/>
<path
d="M802.66217,215.522,815.457,205.28854c-9.93976-1.09662-14.0238,4.32429-15.69525,8.615-7.76532-3.22446-16.21881,1.00136-16.21881,1.00136l25.6001,9.29375A19.37209,19.37209,0,0,0,802.66217,215.522Z"
transform="translate(-384.54297 -170.14522)" fill="#3f3d56"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 24 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -2,7 +2,8 @@ import DashboardLayouts from "@/layouts/dashboardLayouts";
import useUser from "@/lib/app/hooks/useUser";
import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
import {
Avatar, Card,
Avatar,
Card,
CardActions,
CardContent,
CardHeader,
@@ -12,14 +13,14 @@ import {
Stack,
Typography
} from "@mui/material";
import { styled } from "@mui/material/styles";
import { useTranslations } from "next-intl";
import { useState } from "react";
import {styled} from "@mui/material/styles";
import {useTranslations} from "next-intl";
import {useState} from "react";
const ExpandMore = styled((props) => {
const { expand, ...other } = props;
const {expand, ...other} = props;
return <IconButton {...other} />;
})(({ theme, expand }) => ({
})(({theme, expand}) => ({
transform: !expand ? "rotate(0deg)" : "rotate(180deg)",
marginLeft: "auto",
transition: theme.transitions.create("transform", {
@@ -49,7 +50,7 @@ const data = [
const DashboardLoanFollowUpComponent = () => {
const t = useTranslations();
const { token } = useUser();
const {token} = useUser();
const [expanded, setExpanded] = useState([]);
@@ -74,15 +75,15 @@ const DashboardLoanFollowUpComponent = () => {
container
columnSpacing={2}
rowSpacing={2}
sx={{ alignItems: "start", justifyContent: "center" }}
sx={{alignItems: "start", justifyContent: "center"}}
>
{data.map((item, index) => (
<Grid item xs={12} md={6} lg={4} key={index}>
<Card sx={{ width: "100%" }}>
<Card sx={{width: "100%"}}>
<CardHeader
avatar={
<Avatar
sx={{ bgcolor: "primary.main" }}
sx={{bgcolor: "primary.main"}}
aria-label="recipe"
></Avatar>
}
@@ -101,7 +102,7 @@ const DashboardLoanFollowUpComponent = () => {
aria-expanded={expanded[index]}
aria-label="show more"
>
<ExpandMoreIcon />
<ExpandMoreIcon/>
</ExpandMore>
</CardActions>
<Collapse in={expanded[index]} timeout="auto" unmountOnExit>

View File

@@ -2,33 +2,30 @@ import Notifications from "@/core/components/notifications";
import SelectBox from "@/core/components/SelectBox";
import StyledForm from "@/core/components/StyledForm";
import UploadSystem from "@/core/components/UploadSystem";
import {
GET_PROVINCE_LIST,
SEND_LOAN_REQUEST_NAVGAN,
} from "@/core/data/apiRoutes";
import {GET_PROVINCE_LIST, SEND_LOAN_REQUEST_NAVGAN,} from "@/core/data/apiRoutes";
import useDirection from "@/lib/app/hooks/useDirection";
import useUser from "@/lib/app/hooks/useUser";
import DataSaverOnIcon from "@mui/icons-material/DataSaverOn";
import { Box, Button, Stack, TextField } from "@mui/material";
import {Box, Button, Stack, TextField} from "@mui/material";
import axios from "axios";
import { Field, Formik } from "formik";
import { useTranslations } from "next-intl";
import { useEffect, useState } from "react";
import {Field, Formik} from "formik";
import {useTranslations} from "next-intl";
import {useEffect, useState} from "react";
import * as Yup from "yup";
const NavyForm = () => {
const t = useTranslations();
const { directionApp } = useDirection();
const { token } = useUser();
const {directionApp} = useDirection();
const {token} = useUser();
// get province list
const [provinceList, setProvinceList] = useState([]);
useEffect(() => {
axios
.get(GET_PROVINCE_LIST, {
headers: { Authorization: `Bearer ${token}` },
headers: {Authorization: `Bearer ${token}`},
})
.then(({ data }) => {
.then(({data}) => {
const formattedData = data.map((province, index) => ({
id: index,
name: province.name,
@@ -164,11 +161,11 @@ const NavyForm = () => {
width: "100%",
}}
>
<StyledForm sx={{ width: "100%" }}>
<StyledForm sx={{width: "100%"}}>
<Box
sx={{
display: "flex",
flexDirection: { xs: "column", sm: "row" },
flexDirection: {xs: "column", sm: "row"},
alignItems: "start",
justifyContent: "center",
width: "100%",
@@ -176,14 +173,14 @@ const NavyForm = () => {
>
<Box
sx={{
mx: { xs: 0, sm: 2 },
mx: {xs: 0, sm: 2},
my: 2,
width: "100%",
}}
>
<Field
as={TextField}
sx={{ width: "100%" }}
sx={{width: "100%"}}
name="name"
variant="outlined"
size="small"
@@ -197,14 +194,14 @@ const NavyForm = () => {
</Box>
<Box
sx={{
mx: { xs: 0, sm: 2 },
mx: {xs: 0, sm: 2},
my: 2,
width: "100%",
}}
>
<Field
as={TextField}
sx={{ width: "100%" }}
sx={{width: "100%"}}
name="phone_number"
variant="outlined"
size="small"
@@ -230,7 +227,7 @@ const NavyForm = () => {
<Box
sx={{
display: "flex",
flexDirection: { xs: "column", sm: "row" },
flexDirection: {xs: "column", sm: "row"},
alignItems: "start",
justifyContent: "center",
width: "100%",
@@ -238,14 +235,14 @@ const NavyForm = () => {
>
<Box
sx={{
mx: { xs: 0, sm: 2 },
mx: {xs: 0, sm: 2},
my: 2,
width: "100%",
}}
>
<Field
as={TextField}
sx={{ width: "100%" }}
sx={{width: "100%"}}
name="vehicle_type"
variant="outlined"
size="small"
@@ -269,14 +266,14 @@ const NavyForm = () => {
</Box>
<Box
sx={{
mx: { xs: 0, sm: 2 },
mx: {xs: 0, sm: 2},
my: 2,
width: "100%",
}}
>
<Field
as={TextField}
sx={{ width: "100%" }}
sx={{width: "100%"}}
name="plate_number"
variant="outlined"
size="small"
@@ -300,7 +297,7 @@ const NavyForm = () => {
</Box>
<Box
sx={{
mx: { xs: 0, sm: 2 },
mx: {xs: 0, sm: 2},
my: 2,
width: "100%",
}}
@@ -327,7 +324,7 @@ const NavyForm = () => {
<Box
sx={{
display: "flex",
flexDirection: { xs: "column", sm: "row" },
flexDirection: {xs: "column", sm: "row"},
alignItems: "start",
justifyContent: "center",
width: "100%",
@@ -335,14 +332,14 @@ const NavyForm = () => {
>
<Box
sx={{
mx: { xs: 0, sm: 2 },
mx: {xs: 0, sm: 2},
my: 2,
width: "100%",
}}
>
<Field
as={TextField}
sx={{ width: "100%" }}
sx={{width: "100%"}}
name="navgan_id"
variant="outlined"
size="small"
@@ -362,14 +359,14 @@ const NavyForm = () => {
</Box>
<Box
sx={{
mx: { xs: 0, sm: 2 },
mx: {xs: 0, sm: 2},
my: 2,
width: "100%",
}}
>
<Field
as={TextField}
sx={{ width: "100%" }}
sx={{width: "100%"}}
name="national_code"
variant="outlined"
size="small"
@@ -393,14 +390,14 @@ const NavyForm = () => {
</Box>
<Box
sx={{
mx: { xs: 0, sm: 2 },
mx: {xs: 0, sm: 2},
my: 2,
width: "100%",
}}
>
<Field
as={TextField}
sx={{ width: "100%" }}
sx={{width: "100%"}}
name="shenasname_id"
variant="outlined"
size="small"
@@ -426,7 +423,7 @@ const NavyForm = () => {
<Box
sx={{
display: "flex",
flexDirection: { xs: "column", sm: "row" },
flexDirection: {xs: "column", sm: "row"},
alignItems: "center",
justifyContent: "space-around",
width: "100%",
@@ -464,10 +461,10 @@ const NavyForm = () => {
<Box
sx={{
display: "flex",
flexDirection: { xs: "column", sm: "row" },
flexDirection: {xs: "column", sm: "row"},
alignItems: "center",
mx: "auto",
width: { xs: "100%", sm: "30%", md: "25%" },
width: {xs: "100%", sm: "30%", md: "25%"},
}}
>
<Button
@@ -475,7 +472,7 @@ const NavyForm = () => {
type="submit"
variant="contained"
size="large"
endIcon={<DataSaverOnIcon />}
endIcon={<DataSaverOnIcon/>}
disabled={props.isSubmitting ? true : false}
>
{t("LoanRequest.button_submit")}

View File

@@ -1,21 +1,21 @@
import Notifications from "@/core/components/notifications";
import StyledForm from "@/core/components/StyledForm";
import UploadSystem from "@/core/components/UploadSystem";
import { SEND_LOAN_REQUEST_WELFARE } from "@/core/data/apiRoutes";
import {SEND_LOAN_REQUEST_WELFARE} from "@/core/data/apiRoutes";
import useDirection from "@/lib/app/hooks/useDirection";
import useUser from "@/lib/app/hooks/useUser";
import DataSaverOnIcon from "@mui/icons-material/DataSaverOn";
import { Box, Button, Stack, TextField } from "@mui/material";
import {Box, Button, Stack, TextField} from "@mui/material";
import axios from "axios";
import { Field, Formik } from "formik";
import { useTranslations } from "next-intl";
import { useState } from "react";
import {Field, Formik} from "formik";
import {useTranslations} from "next-intl";
import {useState} from "react";
import * as Yup from "yup";
const WelfareServicesForm = () => {
const t = useTranslations();
const { directionApp } = useDirection();
const { token } = useUser();
const {directionApp} = useDirection();
const {token} = useUser();
// upload files
const [selectedImageShenasname, setSelectedImageShenasname] = useState(
@@ -132,11 +132,11 @@ const WelfareServicesForm = () => {
width: "100%",
}}
>
<StyledForm sx={{ width: "100%" }}>
<StyledForm sx={{width: "100%"}}>
<Box
sx={{
display: "flex",
flexDirection: { xs: "column", sm: "row" },
flexDirection: {xs: "column", sm: "row"},
alignItems: "start",
justifyContent: "center",
width: "100%",
@@ -144,14 +144,14 @@ const WelfareServicesForm = () => {
>
<Box
sx={{
mx: { xs: 0, sm: 2 },
mx: {xs: 0, sm: 2},
my: 2,
width: "100%",
}}
>
<Field
as={TextField}
sx={{ width: "100%" }}
sx={{width: "100%"}}
name="name"
variant="outlined"
size="small"
@@ -165,14 +165,14 @@ const WelfareServicesForm = () => {
</Box>
<Box
sx={{
mx: { xs: 0, sm: 2 },
mx: {xs: 0, sm: 2},
my: 2,
width: "100%",
}}
>
<Field
as={TextField}
sx={{ width: "100%" }}
sx={{width: "100%"}}
name="phone_number"
variant="outlined"
size="small"
@@ -198,7 +198,7 @@ const WelfareServicesForm = () => {
<Box
sx={{
display: "flex",
flexDirection: { xs: "column", sm: "row" },
flexDirection: {xs: "column", sm: "row"},
alignItems: "start",
justifyContent: "center",
width: "100%",
@@ -206,14 +206,14 @@ const WelfareServicesForm = () => {
>
<Box
sx={{
mx: { xs: 0, sm: 2 },
mx: {xs: 0, sm: 2},
my: 2,
width: "100%",
}}
>
<Field
as={TextField}
sx={{ width: "100%" }}
sx={{width: "100%"}}
name="vehicle_type"
variant="outlined"
size="small"
@@ -237,14 +237,14 @@ const WelfareServicesForm = () => {
</Box>
<Box
sx={{
mx: { xs: 0, sm: 2 },
mx: {xs: 0, sm: 2},
my: 2,
width: "100%",
}}
>
<Field
as={TextField}
sx={{ width: "100%" }}
sx={{width: "100%"}}
name="plate_number"
variant="outlined"
size="small"
@@ -268,14 +268,14 @@ const WelfareServicesForm = () => {
</Box>
<Box
sx={{
mx: { xs: 0, sm: 2 },
mx: {xs: 0, sm: 2},
my: 2,
width: "100%",
}}
>
<Field
as={TextField}
sx={{ width: "100%" }}
sx={{width: "100%"}}
name="province"
variant="outlined"
size="small"
@@ -297,7 +297,7 @@ const WelfareServicesForm = () => {
<Box
sx={{
display: "flex",
flexDirection: { xs: "column", sm: "row" },
flexDirection: {xs: "column", sm: "row"},
alignItems: "start",
justifyContent: "center",
width: "100%",
@@ -305,14 +305,14 @@ const WelfareServicesForm = () => {
>
<Box
sx={{
mx: { xs: 0, sm: 2 },
mx: {xs: 0, sm: 2},
my: 2,
width: "100%",
}}
>
<Field
as={TextField}
sx={{ width: "100%" }}
sx={{width: "100%"}}
name="national_code"
variant="outlined"
size="small"
@@ -336,14 +336,14 @@ const WelfareServicesForm = () => {
</Box>
<Box
sx={{
mx: { xs: 0, sm: 2 },
mx: {xs: 0, sm: 2},
my: 2,
width: "100%",
}}
>
<Field
as={TextField}
sx={{ width: "100%" }}
sx={{width: "100%"}}
name="shenasname_id"
variant="outlined"
size="small"
@@ -369,7 +369,7 @@ const WelfareServicesForm = () => {
<Box
sx={{
display: "flex",
flexDirection: { xs: "column", sm: "row" },
flexDirection: {xs: "column", sm: "row"},
alignItems: "center",
justifyContent: "space-around",
width: "100%",
@@ -407,11 +407,11 @@ const WelfareServicesForm = () => {
<Box
sx={{
display: "flex",
flexDirection: { xs: "column", sm: "row" },
flexDirection: {xs: "column", sm: "row"},
alignItems: "center",
mx: "auto",
my: 2,
width: { xs: "100%", sm: "30%", md: "25%" },
width: {xs: "100%", sm: "30%", md: "25%"},
}}
>
<Button
@@ -419,7 +419,7 @@ const WelfareServicesForm = () => {
type="submit"
variant="contained"
size="large"
endIcon={<DataSaverOnIcon />}
endIcon={<DataSaverOnIcon/>}
disabled={props.isSubmitting ? true : false}
>
{t("LoanRequest.button_submit")}

View File

@@ -3,17 +3,17 @@ import DashboardLayouts from "@/layouts/dashboardLayouts";
import useUser from "@/lib/app/hooks/useUser";
import NavyForm from "./NavyForm";
import WelfareServicesForm from "./WelfareServicesForm";
import { Divider, Chip, Box } from "@mui/material";
import { useTranslations } from "next-intl";
import {Box, Chip, Divider} from "@mui/material";
import {useTranslations} from "next-intl";
const DashboardLoanRequestComponent = () => {
const t = useTranslations();
const { user } = useUser();
const {user} = useUser();
return (
<DashboardLayouts>
<CenterLayout>
<Box sx={{ width: "80%", my: 2 }}>
<Box sx={{width: "80%", my: 2}}>
<Divider>
<Chip
label={`${t("LoanRequest.loan_request_page")} | ${
@@ -22,7 +22,7 @@ const DashboardLoanRequestComponent = () => {
/>
</Divider>
</Box>
{user.type_id == 1 ? <NavyForm /> : <WelfareServicesForm />}
{user.type_id == 1 ? <NavyForm/> : <WelfareServicesForm/>}
</CenterLayout>
</DashboardLayouts>
);

View File

@@ -1,18 +1,18 @@
import dahsboardImage from "&/images/dashboard.svg";
import { NextLinkComposed } from "@/core/components/LinkRouting";
import {NextLinkComposed} from "@/core/components/LinkRouting";
import StyledImage from "@/core/components/StyledImage";
import CenterLayout from "@/layouts/CenterLayout";
import FullPageLayout from "@/layouts/FullPageLayout";
import useUser from "@/lib/app/hooks/useUser";
import { Button, Typography } from "@mui/material";
import { useTranslations } from "next-intl";
import {Button, Typography} from "@mui/material";
import {useTranslations} from "next-intl";
const FirstComponent = () => {
const t = useTranslations();
const { isAuth } = useUser();
const {isAuth} = useUser();
return (
<FullPageLayout sx={{ p: 1 }}>
<FullPageLayout sx={{p: 1}}>
<CenterLayout spacing={3}>
<StyledImage
src={dahsboardImage}
@@ -21,7 +21,7 @@ const FirstComponent = () => {
height={200}
priority
/>
<Typography variant="h5" sx={{ textAlign: "center" }}>
<Typography variant="h5" sx={{textAlign: "center"}}>
{t("app_name")}
</Typography>
{isAuth ? (
@@ -36,7 +36,7 @@ const FirstComponent = () => {
</Button>
) : (
<Button
sx={{ whiteSpace: "nowrap" }}
sx={{whiteSpace: "nowrap"}}
variant="contained"
size="large"
component={NextLinkComposed}

View File

@@ -1,26 +1,17 @@
import Notifications from "@/core/components/notifications";
import ResendToken from "@/core/components/ResendToken";
import StyledForm from "@/core/components/StyledForm";
import { LOGIN } from "@/core/data/apiRoutes";
import {LOGIN} from "@/core/data/apiRoutes";
import CenterLayout from "@/layouts/CenterLayout";
import FullPageLayout from "@/layouts/FullPageLayout";
import useDirection from "@/lib/app/hooks/useDirection";
import useUser from "@/lib/app/hooks/useUser";
import ChangeCircleIcon from "@mui/icons-material/ChangeCircle";
import LoginIcon from "@mui/icons-material/Login";
import {
Box,
Button,
Container,
Grid,
Paper,
Stack,
TextField,
Typography,
} from "@mui/material";
import {Box, Button, Container, Grid, Paper, Stack, TextField, Typography,} from "@mui/material";
import axios from "axios";
import { Field, Formik } from "formik";
import { useTranslations } from "next-intl";
import {Field, Formik} from "formik";
import {useTranslations} from "next-intl";
import Image from "next/image";
import * as Yup from "yup";
@@ -30,10 +21,10 @@ const SendToken = ({
timer,
setTimer,
initialTimerValue,
}) => {
}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const { setToken } = useUser();
const {directionApp} = useDirection();
const {setToken} = useUser();
const initialValues = {
phone_number: PhoneNumber,
@@ -63,7 +54,7 @@ const SendToken = ({
};
return (
<FullPageLayout sx={{ p: 1 }}>
<FullPageLayout sx={{p: 1}}>
<CenterLayout>
<Container maxWidth="sm">
<Paper elevation={0}>
@@ -73,9 +64,9 @@ const SendToken = ({
validationSchema={validationSchema}
>
{(props) => (
<Stack spacing={2} sx={{ p: 2 }}>
<Stack spacing={2} sx={{p: 2}}>
<Box
sx={{ position: "relative", width: "100%", height: 200 }}
sx={{position: "relative", width: "100%", height: 200}}
>
<Image
fill
@@ -87,25 +78,25 @@ const SendToken = ({
<Typography margin={2} variant="h4" textAlign="center">
{t("login")}
</Typography>
<StyledForm sx={{ width: "100%" }}>
<Stack spacing={3} sx={{ p: 2 }}>
<StyledForm sx={{width: "100%"}}>
<Stack spacing={3} sx={{p: 2}}>
<Box
sx={{
display: { xs: "column", sm: "flex" },
display: {xs: "column", sm: "flex"},
alignItems: "center",
textAlign: { xs: "center", sm: "unset" },
textAlign: {xs: "center", sm: "unset"},
justifyContent: "space-between",
}}
>
<Typography variant="button" sx={{ display: "block" }}>
<Typography variant="button" sx={{display: "block"}}>
{t("LoginPage.sent_token_to")}: {PhoneNumber}
</Typography>
<Button
size="small"
startIcon={<ChangeCircleIcon />}
startIcon={<ChangeCircleIcon/>}
variant="outlined"
onClick={() => setOtpToken(false)}
sx={{ whiteSpace: "nowrap", my: { xs: 1, sm: 0 } }}
sx={{whiteSpace: "nowrap", my: {xs: 1, sm: 0}}}
>
{t("LoginPage.change_phone_number")}
</Button>
@@ -139,7 +130,7 @@ const SendToken = ({
type="submit"
variant="contained"
size="large"
endIcon={<LoginIcon />}
endIcon={<LoginIcon/>}
disabled={props.isSubmitting ? true : false}
>
{t("LoginPage.button_submit")}

View File

@@ -1,27 +1,18 @@
import LinkRouting from "@/core/components/LinkRouting";
import Notifications from "@/core/components/notifications";
import StyledForm from "@/core/components/StyledForm";
import { SEND_OTP_TOKEN } from "@/core/data/apiRoutes";
import {SEND_OTP_TOKEN} from "@/core/data/apiRoutes";
import CenterLayout from "@/layouts/CenterLayout";
import FullPageLayout from "@/layouts/FullPageLayout";
import useDirection from "@/lib/app/hooks/useDirection";
import FingerprintIcon from "@mui/icons-material/Fingerprint";
import PersonAddIcon from "@mui/icons-material/PersonAdd";
import {
Box,
Button,
Container,
Grid,
Paper,
Stack,
TextField,
Typography,
} from "@mui/material";
import {Box, Button, Container, Grid, Paper, Stack, TextField, Typography,} from "@mui/material";
import axios from "axios";
import { Field, Formik } from "formik";
import { useTranslations } from "next-intl";
import {Field, Formik} from "formik";
import {useTranslations} from "next-intl";
import Image from "next/image";
import { useSearchParams } from "next/navigation";
import {useSearchParams} from "next/navigation";
import * as Yup from "yup";
const SendUserData = ({
@@ -30,9 +21,9 @@ const SendUserData = ({
PhoneNumber,
setTimer,
initialTimerValue,
}) => {
}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const {directionApp} = useDirection();
const searchParams = useSearchParams();
const backUrlDecodedPath = searchParams.get("back_url");
@@ -63,7 +54,7 @@ const SendUserData = ({
};
return (
<FullPageLayout sx={{ p: 1 }}>
<FullPageLayout sx={{p: 1}}>
<CenterLayout>
<Container maxWidth="sm">
<Paper elevation={0}>
@@ -73,9 +64,9 @@ const SendUserData = ({
validationSchema={validationSchema}
>
{(props) => (
<Stack spacing={2} sx={{ p: 2 }}>
<Stack spacing={2} sx={{p: 2}}>
<Box
sx={{ position: "relative", width: "100%", height: 200 }}
sx={{position: "relative", width: "100%", height: 200}}
>
<Image
fill
@@ -87,8 +78,8 @@ const SendUserData = ({
<Typography margin={2} variant="h4" textAlign="center">
{t("Titles.title_login_page")}
</Typography>
<StyledForm sx={{ width: "100%" }}>
<Stack spacing={3} sx={{ p: 2 }}>
<StyledForm sx={{width: "100%"}}>
<Stack spacing={3} sx={{p: 2}}>
<Field
as={TextField}
name="phone_number"
@@ -113,32 +104,32 @@ const SendUserData = ({
/>
<Grid
container
rowSpacing={{ xs: 1, sm: 0 }}
rowSpacing={{xs: 1, sm: 0}}
sx={{
flexDirection: { xs: "column-reverse", sm: "row" },
flexDirection: {xs: "column-reverse", sm: "row"},
}}
>
<Grid item xs={12} sm={6} sx={{ pr: { xs: 0, sm: 1 } }}>
<Grid item xs={12} sm={6} sx={{pr: {xs: 0, sm: 1}}}>
<LinkRouting href={"/register"}>
<Button
fullWidth
type="submit"
variant="outlined"
size="large"
endIcon={<PersonAddIcon />}
endIcon={<PersonAddIcon/>}
disabled={props.isSubmitting ? true : false}
>
{t("LoginPage.button_make_account")}
</Button>
</LinkRouting>
</Grid>
<Grid item xs={12} sm={6} sx={{ pl: { xs: 0, sm: 1 } }}>
<Grid item xs={12} sm={6} sx={{pl: {xs: 0, sm: 1}}}>
<Button
fullWidth
type="submit"
variant="contained"
size="large"
endIcon={<FingerprintIcon />}
endIcon={<FingerprintIcon/>}
disabled={props.isSubmitting ? true : false}
>
{t("LoginPage.button_request_verification")}
@@ -155,7 +146,7 @@ const SendUserData = ({
</CenterLayout>
<Stack direction="row" alignItems="center" justifyContent="center">
<LinkRouting
sx={{ margin: 2 }}
sx={{margin: 2}}
href={
backUrlDecodedPath ? decodeURIComponent(backUrlDecodedPath) : "/"
}

View File

@@ -1,4 +1,4 @@
import { useState } from "react";
import {useState} from "react";
import SendToken from "./SendToken";
import SendUserData from "./SendUserData";

View File

@@ -1,16 +1,16 @@
import CenterLayout from "@/layouts/CenterLayout";
import FullPageLayout from "@/layouts/FullPageLayout";
import { Box, Button, Typography } from "@mui/material";
import { NextLinkComposed } from "@/core/components/LinkRouting";
import { useTranslations } from "next-intl";
import {Box, Button, Typography} from "@mui/material";
import {NextLinkComposed} from "@/core/components/LinkRouting";
import {useTranslations} from "next-intl";
import Image from "next/image";
const NotFoundComponent = () => {
const t = useTranslations();
return (
<FullPageLayout sx={{ p: 1 }}>
<FullPageLayout sx={{p: 1}}>
<CenterLayout>
<Box sx={{ position: "relative", width: "100%", height: 250 }}>
<Box sx={{position: "relative", width: "100%", height: 250}}>
<Image
fill
src="/images/not-found.svg"

View File

@@ -1,25 +1,17 @@
import LinkRouting from "@/core/components/LinkRouting";
import Notifications from "@/core/components/notifications";
import StyledForm from "@/core/components/StyledForm";
import { SEND_OTP_TOKEN } from "@/core/data/apiRoutes";
import {SEND_OTP_TOKEN} from "@/core/data/apiRoutes";
import CenterLayout from "@/layouts/CenterLayout";
import FullPageLayout from "@/layouts/FullPageLayout";
import useDirection from "@/lib/app/hooks/useDirection";
import FingerprintIcon from "@mui/icons-material/Fingerprint";
import {
Box,
Button,
Container,
Paper,
Stack,
TextField,
Typography,
} from "@mui/material";
import {Box, Button, Container, Paper, Stack, TextField, Typography,} from "@mui/material";
import axios from "axios";
import { Field, Formik } from "formik";
import { useTranslations } from "next-intl";
import {Field, Formik} from "formik";
import {useTranslations} from "next-intl";
import Image from "next/image";
import { useSearchParams } from "next/navigation";
import {useSearchParams} from "next/navigation";
import * as Yup from "yup";
const RequestOtp = ({
@@ -28,9 +20,9 @@ const RequestOtp = ({
PhoneNumber,
setTimer,
initialTimerValue,
}) => {
}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const {directionApp} = useDirection();
const searchParams = useSearchParams();
const backUrlDecodedPath = searchParams.get("back_url");
@@ -63,7 +55,7 @@ const RequestOtp = ({
};
return (
<FullPageLayout sx={{ p: 1 }}>
<FullPageLayout sx={{p: 1}}>
<CenterLayout>
<Container maxWidth="sm">
<Paper elevation={0}>
@@ -73,9 +65,9 @@ const RequestOtp = ({
validationSchema={validationSchema}
>
{(props) => (
<Stack spacing={2} sx={{ p: 2 }}>
<Stack spacing={2} sx={{p: 2}}>
<Box
sx={{ position: "relative", width: "100%", height: 200 }}
sx={{position: "relative", width: "100%", height: 200}}
>
<Image
fill
@@ -87,8 +79,8 @@ const RequestOtp = ({
<Typography margin={2} variant="h4" textAlign="center">
{t("Titles.title_register_page")}
</Typography>
<StyledForm sx={{ width: "100%" }}>
<Stack spacing={3} sx={{ p: 2 }}>
<StyledForm sx={{width: "100%"}}>
<Stack spacing={3} sx={{p: 2}}>
<Field
as={TextField}
name="phone_number"
@@ -116,7 +108,7 @@ const RequestOtp = ({
type="submit"
variant="contained"
size="large"
endIcon={<FingerprintIcon />}
endIcon={<FingerprintIcon/>}
disabled={props.isSubmitting ? true : false}
>
{t("RegisterPage.button_request_verification")}
@@ -131,7 +123,7 @@ const RequestOtp = ({
</CenterLayout>
<Stack direction="row" alignItems="center" justifyContent="center">
<LinkRouting
sx={{ margin: 2 }}
sx={{margin: 2}}
href={
backUrlDecodedPath
? decodeURIComponent(backUrlDecodedPath)

View File

@@ -1,23 +1,22 @@
import dahsboardImage from "&/images/dashboard.svg";
import LinkRouting from "@/core/components/LinkRouting";
import { NextLinkComposed } from "@/core/components/LinkRouting";
import LinkRouting, {NextLinkComposed} from "@/core/components/LinkRouting";
import StyledImage from "@/core/components/StyledImage";
import CenterLayout from "@/layouts/CenterLayout";
import FullPageLayout from "@/layouts/FullPageLayout";
import useUser from "@/lib/app/hooks/useUser";
import { Box, Button, Grid, Stack } from "@mui/material";
import { useTranslations } from "next-intl";
import { useSearchParams } from "next/navigation";
import {Box, Button, Grid, Stack} from "@mui/material";
import {useTranslations} from "next-intl";
import {useSearchParams} from "next/navigation";
const RegisterComponent = () => {
const t = useTranslations();
const { isAuth } = useUser();
const {isAuth} = useUser();
const searchParams = useSearchParams();
const backUrlDecodedPath = searchParams.get("back_url");
return (
<FullPageLayout sx={{ p: 1 }}>
<FullPageLayout sx={{p: 1}}>
<CenterLayout spacing={3}>
<StyledImage
src={dahsboardImage}
@@ -40,15 +39,15 @@ const RegisterComponent = () => {
<Box>
<Grid
container
rowSpacing={{ xs: 1, sm: 0 }}
rowSpacing={{xs: 1, sm: 0}}
sx={{
flexDirection: { xs: "column", sm: "row" },
flexDirection: {xs: "column", sm: "row"},
alignItems: "center",
}}
>
<Grid item xs={12} sm={6} sx={{ px: { xs: 0, sm: 1 } }}>
<Grid item xs={12} sm={6} sx={{px: {xs: 0, sm: 1}}}>
<Button
sx={{ whiteSpace: "nowrap" }}
sx={{whiteSpace: "nowrap"}}
variant="contained"
size="large"
component={NextLinkComposed}
@@ -59,9 +58,9 @@ const RegisterComponent = () => {
{t("register_navy")}
</Button>
</Grid>
<Grid item xs={12} sm={6} sx={{ px: { xs: 0, sm: 1 } }}>
<Grid item xs={12} sm={6} sx={{px: {xs: 0, sm: 1}}}>
<Button
sx={{ whiteSpace: "nowrap" }}
sx={{whiteSpace: "nowrap"}}
variant="contained"
size="large"
component={NextLinkComposed}
@@ -78,7 +77,7 @@ const RegisterComponent = () => {
</CenterLayout>
<Stack direction="row" alignItems="center" justifyContent="center">
<LinkRouting
sx={{ margin: 2 }}
sx={{margin: 2}}
href={
backUrlDecodedPath
? decodeURIComponent(backUrlDecodedPath)

View File

@@ -1,25 +1,15 @@
import Notifications from "@/core/components/notifications";
import StyledForm from "@/core/components/StyledForm";
import { REGISTER } from "@/core/data/apiRoutes";
import {REGISTER} from "@/core/data/apiRoutes";
import CenterLayout from "@/layouts/CenterLayout";
import FullPageLayout from "@/layouts/FullPageLayout";
import useDirection from "@/lib/app/hooks/useDirection";
import LoginIcon from "@mui/icons-material/Login";
import ChangeCircleIcon from "@mui/icons-material/ChangeCircle";
import {
Box,
Button,
Chip,
Container,
Divider,
Paper,
Stack,
TextField,
Typography,
} from "@mui/material";
import {Box, Button, Chip, Container, Divider, Paper, Stack, TextField, Typography,} from "@mui/material";
import axios from "axios";
import { Field, Formik } from "formik";
import { useTranslations } from "next-intl";
import {Field, Formik} from "formik";
import {useTranslations} from "next-intl";
import Image from "next/image";
import * as Yup from "yup";
import ResendToken from "@/core/components/ResendToken";
@@ -31,10 +21,10 @@ const UserRegister = ({
initialTimerValue,
timer,
setTimer,
}) => {
}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const { setToken } = useUser();
const {directionApp} = useDirection();
const {setToken} = useUser();
const initialValues = {
type_id: "1",
@@ -77,7 +67,7 @@ const UserRegister = ({
};
return (
<FullPageLayout sx={{ p: 1 }}>
<FullPageLayout sx={{p: 1}}>
<CenterLayout>
<Container maxWidth="sm">
<Paper elevation={0}>
@@ -87,9 +77,9 @@ const UserRegister = ({
validationSchema={validationSchema}
>
{(props) => (
<Stack spacing={2} sx={{ p: 2 }}>
<Stack spacing={2} sx={{p: 2}}>
<Box
sx={{ position: "relative", width: "100%", height: 200 }}
sx={{position: "relative", width: "100%", height: 200}}
>
<Image
fill
@@ -101,24 +91,24 @@ const UserRegister = ({
<Typography margin={2} variant="h4" textAlign="center">
{t("register_navy")}
</Typography>
<StyledForm sx={{ width: "100%" }}>
<Stack spacing={3} sx={{ p: 2 }}>
<StyledForm sx={{width: "100%"}}>
<Stack spacing={3} sx={{p: 2}}>
<Box
sx={{
display: { xs: "column", sm: "flex" },
display: {xs: "column", sm: "flex"},
alignItems: "center",
textAlign: { xs: "center", sm: "unset" },
textAlign: {xs: "center", sm: "unset"},
justifyContent: "space-between",
}}
>
<Typography variant="button" sx={{ display: "block" }}>
<Typography variant="button" sx={{display: "block"}}>
{t("LoginPage.sent_token_to")}: {PhoneNumber}
</Typography>
<Button
size="small"
startIcon={<ChangeCircleIcon />}
startIcon={<ChangeCircleIcon/>}
variant="outlined"
sx={{ whiteSpace: "nowrap", my: { xs: 1, sm: 0 } }}
sx={{whiteSpace: "nowrap", my: {xs: 1, sm: 0}}}
onClick={() => setOtpToken(false)}
>
{t("LoginPage.change_phone_number")}
@@ -153,7 +143,7 @@ const UserRegister = ({
PhoneNumber={PhoneNumber}
/>
<Divider>
<Chip label={t("RegisterPage.complete_information")} />
<Chip label={t("RegisterPage.complete_information")}/>
</Divider>
<Field
as={TextField}
@@ -202,7 +192,7 @@ const UserRegister = ({
type="submit"
variant="contained"
size="large"
endIcon={<LoginIcon />}
endIcon={<LoginIcon/>}
disabled={props.isSubmitting ? true : false}
>
{t("RegisterPage.button_submit")}

View File

@@ -1,4 +1,4 @@
import { useState } from "react";
import {useState} from "react";
import RequestOtp from "../RequestOtp";
import UserRegister from "./UserRegister";

View File

@@ -1,25 +1,15 @@
import Notifications from "@/core/components/notifications";
import StyledForm from "@/core/components/StyledForm";
import { REGISTER } from "@/core/data/apiRoutes";
import {REGISTER} from "@/core/data/apiRoutes";
import CenterLayout from "@/layouts/CenterLayout";
import FullPageLayout from "@/layouts/FullPageLayout";
import useDirection from "@/lib/app/hooks/useDirection";
import LoginIcon from "@mui/icons-material/Login";
import ChangeCircleIcon from "@mui/icons-material/ChangeCircle";
import {
Box,
Button,
Chip,
Container,
Divider,
Paper,
Stack,
TextField,
Typography,
} from "@mui/material";
import {Box, Button, Chip, Container, Divider, Paper, Stack, TextField, Typography,} from "@mui/material";
import axios from "axios";
import { Field, Formik } from "formik";
import { useTranslations } from "next-intl";
import {Field, Formik} from "formik";
import {useTranslations} from "next-intl";
import Image from "next/image";
import * as Yup from "yup";
import ResendToken from "@/core/components/ResendToken";
@@ -31,10 +21,10 @@ const UserRegister = ({
initialTimerValue,
timer,
setTimer,
}) => {
}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const { setToken } = useUser();
const {directionApp} = useDirection();
const {setToken} = useUser();
const initialValues = {
type_id: "2",
@@ -74,7 +64,7 @@ const UserRegister = ({
};
return (
<FullPageLayout sx={{ p: 1 }}>
<FullPageLayout sx={{p: 1}}>
<CenterLayout>
<Container maxWidth="sm">
<Paper elevation={0}>
@@ -84,9 +74,9 @@ const UserRegister = ({
validationSchema={validationSchema}
>
{(props) => (
<Stack spacing={2} sx={{ p: 2 }}>
<Stack spacing={2} sx={{p: 2}}>
<Box
sx={{ position: "relative", width: "100%", height: 200 }}
sx={{position: "relative", width: "100%", height: 200}}
>
<Image
fill
@@ -98,25 +88,25 @@ const UserRegister = ({
<Typography margin={2} variant="h4" textAlign="center">
{t("register_welfare_services")}
</Typography>
<StyledForm sx={{ width: "100%" }}>
<Stack spacing={3} sx={{ p: 2 }}>
<StyledForm sx={{width: "100%"}}>
<Stack spacing={3} sx={{p: 2}}>
<Box
sx={{
display: { xs: "column", sm: "flex" },
display: {xs: "column", sm: "flex"},
alignItems: "center",
textAlign: { xs: "center", sm: "unset" },
textAlign: {xs: "center", sm: "unset"},
justifyContent: "space-between",
}}
>
<Typography variant="button" sx={{ display: "block" }}>
<Typography variant="button" sx={{display: "block"}}>
{t("LoginPage.sent_token_to")}: {PhoneNumber}
</Typography>
<Button
size="small"
startIcon={<ChangeCircleIcon />}
startIcon={<ChangeCircleIcon/>}
variant="outlined"
onClick={() => setOtpToken(false)}
sx={{ whiteSpace: "nowrap", my: { xs: 1, sm: 0 } }}
sx={{whiteSpace: "nowrap", my: {xs: 1, sm: 0}}}
>
{t("LoginPage.change_phone_number")}
</Button>
@@ -150,7 +140,7 @@ const UserRegister = ({
PhoneNumber={PhoneNumber}
/>
<Divider>
<Chip label={t("RegisterPage.complete_information")} />
<Chip label={t("RegisterPage.complete_information")}/>
</Divider>
<Field
as={TextField}
@@ -178,7 +168,7 @@ const UserRegister = ({
type="submit"
variant="contained"
size="large"
endIcon={<LoginIcon />}
endIcon={<LoginIcon/>}
disabled={props.isSubmitting ? true : false}
>
{t("RegisterPage.button_submit")}

View File

@@ -1,4 +1,4 @@
import { useState } from "react";
import {useState} from "react";
import RequestOtp from "../RequestOtp";
import UserRegister from "./UserRegister";

View File

@@ -1,8 +1,8 @@
import MuiLink from "@mui/material/Link";
import { styled } from "@mui/material/styles";
import {styled} from "@mui/material/styles";
import clsx from "clsx";
import NextLink from "next/link";
import { useRouter } from "next/router";
import {useRouter} from "next/router";
import * as React from "react";
// Add support for the sx prop for consistency with the other branches.

View File

@@ -1,4 +1,4 @@
import { Backdrop, Fade, styled } from "@mui/material";
import {Backdrop, Fade, styled} from "@mui/material";
import StyledImage from "./StyledImage";
const LoadingImage = styled(StyledImage)({
@@ -19,11 +19,11 @@ const LoadingImage = styled(StyledImage)({
animation: "load 2s infinite",
});
const LoadingHardPage = ({ children, loading }) => {
const LoadingHardPage = ({children, loading}) => {
return (
<>
<Backdrop
sx={{ bgcolor: "#fff", zIndex: (theme) => theme.zIndex.drawer + 1 }}
sx={{bgcolor: "#fff", zIndex: (theme) => theme.zIndex.drawer + 1}}
open={loading}
>
<Fade in={true}>

View File

@@ -2,9 +2,9 @@ import CenterLayout from "@/layouts/CenterLayout";
import FullPageLayout from "@/layouts/FullPageLayout";
import StyledImage from "./StyledImage";
const Message = ({ text, actions }) => {
const Message = ({text, actions}) => {
return (
<FullPageLayout sx={{ p: 1 }}>
<FullPageLayout sx={{p: 1}}>
<CenterLayout spacing={3}>
<StyledImage
src={"/images/loading.svg"}

View File

@@ -1,7 +1,7 @@
import { useState } from "react";
import { IconButton, InputAdornment, TextField } from "@mui/material";
import { Visibility, VisibilityOff } from "@mui/icons-material";
import { Field } from "formik";
import {useState} from "react";
import {IconButton, InputAdornment, TextField} from "@mui/material";
import {Visibility, VisibilityOff} from "@mui/icons-material";
import {Field} from "formik";
const PasswordField = (props) => {
const [showPassword, setShowPassword] = useState(false);
@@ -21,7 +21,7 @@ const PasswordField = (props) => {
endAdornment: (
<InputAdornment position="end">
<IconButton onClick={handleClickShowPassword}>
{showPassword ? <Visibility /> : <VisibilityOff />}
{showPassword ? <Visibility/> : <VisibilityOff/>}
</IconButton>
</InputAdornment>
),

View File

@@ -1,14 +1,14 @@
import Notifications from "@/core/components/notifications";
import useDirection from "@/lib/app/hooks/useDirection";
import { Button, Typography } from "@mui/material";
import {Button} from "@mui/material";
import axios from "axios";
import { useTranslations } from "next-intl";
import { useEffect } from "react";
import { SEND_OTP_TOKEN } from "../data/apiRoutes";
import {useTranslations} from "next-intl";
import {useEffect} from "react";
import {SEND_OTP_TOKEN} from "../data/apiRoutes";
const ResendToken = ({ initialTimerValue, timer, setTimer, PhoneNumber }) => {
const ResendToken = ({initialTimerValue, timer, setTimer, PhoneNumber}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const {directionApp} = useDirection();
// Countdown Timer
useEffect(() => {
@@ -50,7 +50,7 @@ const ResendToken = ({ initialTimerValue, timer, setTimer, PhoneNumber }) => {
<Button
color="success"
disabled
sx={{ width: "auto", alignSelf: "center", mt: 0 }}
sx={{width: "auto", alignSelf: "center", mt: 0}}
onClick={handleResendClick}
>
{t("Resend_code_in")} {timer} {" "}
@@ -59,7 +59,7 @@ const ResendToken = ({ initialTimerValue, timer, setTimer, PhoneNumber }) => {
) : (
<Button
color="success"
sx={{ width: "120px", alignSelf: "center", mt: 0 }}
sx={{width: "120px", alignSelf: "center", mt: 0}}
onClick={handleResendClick}
>
{t("resend_code")}

View File

@@ -1,10 +1,4 @@
import {
FormControl,
FormHelperText,
InputLabel,
MenuItem,
Select,
} from "@mui/material";
import {FormControl, FormHelperText, InputLabel, MenuItem, Select,} from "@mui/material";
function SelectBox({
select,
@@ -15,7 +9,7 @@ function SelectBox({
setFieldTouched,
error,
helperText,
}) {
}) {
const handleChange = (event) => {
setFieldValue(selectType, event.target.value);
};

View File

@@ -1,5 +1,5 @@
import { styled } from "@mui/material";
import { Form } from "formik";
import {styled} from "@mui/material";
import {Form} from "formik";
const StyledForm = styled(Form)``;

View File

@@ -1,4 +1,4 @@
import { styled } from "@mui/material";
import {styled} from "@mui/material";
import Image from "next/image";
const StyledImage = styled(Image)``;

View File

@@ -1,7 +1,7 @@
import { useTranslations } from "next-intl";
import {useTranslations} from "next-intl";
import Head from "next/head";
const TitlePage = ({ text }) => {
const TitlePage = ({text}) => {
const t = useTranslations();
return (
<Head>

View File

@@ -1,8 +1,8 @@
import { Box, Button, TextField, Typography } from "@mui/material";
import { useTranslations } from "next-intl";
import {Box, Button, TextField, Typography} from "@mui/material";
import {useTranslations} from "next-intl";
import Image from "next/image";
import DeleteForeverIcon from "@mui/icons-material/DeleteForever";
import { useRef } from "react";
import {useRef} from "react";
const UploadSystem = ({
selectedImage,
@@ -15,7 +15,7 @@ const UploadSystem = ({
fileType,
fileName,
label,
}) => {
}) => {
const t = useTranslations();
const fileInputRef = useRef(null);
@@ -39,7 +39,7 @@ const UploadSystem = ({
};
return (
<Box sx={{ width: imageSize[0], my: 2 }}>
<Box sx={{width: imageSize[0], my: 2}}>
<Typography
margin={2}
sx={{
@@ -117,7 +117,7 @@ const UploadSystem = ({
id="avatar-upload"
type="file"
accept="image/*"
style={{ display: "none" }}
style={{display: "none"}}
onChange={handleUploadChange}
inputRef={fileInputRef}
/>
@@ -129,7 +129,7 @@ const UploadSystem = ({
}}
color="error"
disabled={selectedImage === "/images/upload-image.svg"}
endIcon={<DeleteForeverIcon />}
endIcon={<DeleteForeverIcon/>}
variant="contained"
onClick={handleDeleteImage}
>
@@ -142,7 +142,6 @@ const UploadSystem = ({
export default UploadSystem;
//////****** usage document ******/////////
// 1.) use <UploadSystem /> component inside your page
// 2.) list of props that you need to send is down below

View File

@@ -1,6 +1,6 @@
import { NoSsr } from "@mui/material";
import {NoSsr} from "@mui/material";
const NoSsrHandler = ({ isBot, children }) => {
const NoSsrHandler = ({isBot, children}) => {
if (isBot) return children;
return <NoSsr>{children}</NoSsr>;
};

View File

@@ -1,10 +1,10 @@
import DangerousIcon from "@mui/icons-material/Dangerous";
import { Box, Typography } from "@mui/material";
import { toast } from "react-toastify";
import {Box, Typography} from "@mui/material";
import {toast} from "react-toastify";
const ErrorNotification = (directionApp, t, status, message) => {
toast(
({ closeToast }) => (
({closeToast}) => (
<>
<Box
sx={{
@@ -14,9 +14,9 @@ const ErrorNotification = (directionApp, t, status, message) => {
justifyContent: "start",
}}
>
<Box sx={{ display: "flex", alignItems: "center" }}>
<DangerousIcon color="error" sx={{ mr: 1.6 }} />
<Box sx={{ display: "flex", flexDirection: "column" }}>
<Box sx={{display: "flex", alignItems: "center"}}>
<DangerousIcon color="error" sx={{mr: 1.6}}/>
<Box sx={{display: "flex", flexDirection: "column"}}>
<Typography color="error" variant="button">
{t("notifications.error")} ({t("notifications.code")}: {status})
</Typography>

View File

@@ -1,6 +1,6 @@
import BeenhereIcon from "@mui/icons-material/Beenhere";
import { Box, Typography } from "@mui/material";
import { toast } from "react-toastify";
import {Box, Typography} from "@mui/material";
import {toast} from "react-toastify";
const SuccessNotification = (directionApp, t, status) => {
toast(
@@ -14,9 +14,9 @@ const SuccessNotification = (directionApp, t, status) => {
justifyContent: "start",
}}
>
<Box sx={{ display: "flex", alignItems: "center" }}>
<BeenhereIcon color="success" sx={{ mr: 1.6 }} />
<Box sx={{ display: "flex", flexDirection: "column" }}>
<Box sx={{display: "flex", alignItems: "center"}}>
<BeenhereIcon color="success" sx={{mr: 1.6}}/>
<Box sx={{display: "flex", flexDirection: "column"}}>
<Typography color="success.main" variant="button">
{t("notifications.success")} ({t("notifications.code")}:{" "}
{status})

View File

@@ -1,10 +1,10 @@
import ReportIcon from "@mui/icons-material/Report";
import { Box, Divider, Typography } from "@mui/material";
import { toast } from "react-toastify";
import {Box, Divider, Typography} from "@mui/material";
import {toast} from "react-toastify";
const WarningNotification = (directionApp, t, status) => {
toast(
({ closeToast }) => (
({closeToast}) => (
<>
<Box
sx={{
@@ -14,9 +14,9 @@ const WarningNotification = (directionApp, t, status) => {
justifyContent: "start",
}}
>
<Box sx={{ display: "flex", alignItems: "center" }}>
<ReportIcon color="warning" sx={{ mr: 1.6 }} />
<Box sx={{ display: "flex", flexDirection: "column" }}>
<Box sx={{display: "flex", alignItems: "center"}}>
<ReportIcon color="warning" sx={{mr: 1.6}}/>
<Box sx={{display: "flex", flexDirection: "column"}}>
<Typography color="warning.main" variant="button">
{t("warning")} ({t("code")}: {status})
</Typography>
@@ -26,7 +26,7 @@ const WarningNotification = (directionApp, t, status) => {
</Box>
</Box>
</Box>
<Divider sx={{ my: 1 }} />
<Divider sx={{my: 1}}/>
</>
),
{

View File

@@ -1,17 +1,17 @@
import { toast } from "react-toastify";
import {toast} from "react-toastify";
import ErrorNotification from "./ErrorNotification";
import SuccessNotification from "./SuccessNotification";
import WarningNotification from "./WarningNotification";
const Notifications = async (directionApp, t, response) => {
const { status, data } = response != undefined ? response : ""
const {status, data} = response != undefined ? response : ""
toast.dismiss();
switch (status) {
case 200:
SuccessNotification(directionApp, t, status);
break;
case 400:
ErrorNotification(directionApp, t,status);
ErrorNotification(directionApp, t, status);
break;
case 401:
ErrorNotification(directionApp, t, status);

View File

@@ -1,7 +1,3 @@
import BorderColorIcon from "@mui/icons-material/BorderColor";
import PasswordIcon from "@mui/icons-material/Password";
const headerProfileItems = [
];
const headerProfileItems = [];
export default headerProfileItems;

View File

@@ -8,21 +8,21 @@ const sidebarMenu = [
key: "sidebar.dashboard",
type: "page",
route: "/dashboard",
icon: <SpaceDashboardIcon />,
icon: <SpaceDashboardIcon/>,
selected: false,
},
{
key: "sidebar.loan-request",
type: "page",
route: "/dashboard/loan-request",
icon: <DataSaverOnIcon />,
icon: <DataSaverOnIcon/>,
selected: false,
},
{
key: "sidebar.loan-follow-up",
type: "page",
route: "/dashboard/loan-follow-up",
icon: <BookmarkAddedIcon />,
icon: <BookmarkAddedIcon/>,
selected: false,
},
],

View File

@@ -1,5 +1,5 @@
import createCache from "@emotion/cache";
import { prefixer } from "stylis";
import {prefixer} from "stylis";
import stylisRTLPlugin from "stylis-plugin-rtl";
const isBrowser = typeof document !== "undefined";

View File

@@ -1,4 +1,4 @@
import { createTheme } from "@mui/material/styles";
import {createTheme} from "@mui/material/styles";
import theme from "./theme";
const themeRtl = createTheme({

View File

@@ -4,12 +4,12 @@ import useLoading from "@/lib/app/hooks/useLoading";
import useUser from "@/lib/app/hooks/useUser";
import Head from "next/head";
import NextNProgress from "nextjs-progressbar";
import { useEffect } from "react";
import {useEffect} from "react";
function AppLayout({ children, isBot }) {
const { languageIsReady } = useLanguage();
const { setLoadingPage } = useLoading();
const { userChangedLanguage, token, isAuth } = useUser();
function AppLayout({children, isBot}) {
const {languageIsReady} = useLanguage();
const {setLoadingPage} = useLoading();
const {userChangedLanguage, token, isAuth} = useUser();
useEffect(() => {
if (languageIsReady) {
if (token) {
@@ -42,7 +42,7 @@ function AppLayout({ children, isBot }) {
name="application-name"
content={process.env.NEXT_PUBLIC_API_NAME}
/>
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta
name="apple-mobile-web-app-status-bar-style"
content="black-translucent"
@@ -51,13 +51,13 @@ function AppLayout({ children, isBot }) {
name="apple-mobile-web-app-title"
content={process.env.NEXT_PUBLIC_API_NAME}
/>
<meta name="description" content="Marhaba does it for you" />
<meta name="format-detection" content="telephone=no" />
<meta name="format-detection" content="date=no" />
<meta name="format-detection" content="address=no" />
<meta name="format-detection" content="email=no" />
<meta name="mobile-web-app-capable" content="yes" />
<link rel="apple-touch-icon" href="/icons/maskable_icon_x512.png" />
<meta name="description" content="Marhaba does it for you"/>
<meta name="format-detection" content="telephone=no"/>
<meta name="format-detection" content="date=no"/>
<meta name="format-detection" content="address=no"/>
<meta name="format-detection" content="email=no"/>
<meta name="mobile-web-app-capable" content="yes"/>
<link rel="apple-touch-icon" href="/icons/maskable_icon_x512.png"/>
<link
rel="apple-touch-icon"
sizes="120x120"
@@ -68,8 +68,8 @@ function AppLayout({ children, isBot }) {
sizes="180x180"
href="/icons/maskable_icon_x192.png"
/>
<meta name="google" content="notranslate" />
<meta name="robots" content="noindex" />
<meta name="google" content="notranslate"/>
<meta name="robots" content="noindex"/>
<meta
name="viewport"
content="minimum-scale=1, initial-scale=1, width=device-width, shrink-to-fit=no, user-scalable=no, viewport-fit=cover"
@@ -89,7 +89,7 @@ function AppLayout({ children, isBot }) {
</Head>
<NextNProgress
color={theme.palette.secondary.dark}
options={{ showSpinner: false }}
options={{showSpinner: false}}
/>
{children}
</>

View File

@@ -1,4 +1,4 @@
import { Fade, Stack } from "@mui/material";
import {Fade, Stack} from "@mui/material";
const CenterLayout = (props) => {
return (
@@ -7,7 +7,7 @@ const CenterLayout = (props) => {
alignItems="center"
justifyContent="center"
spacing={props?.spacing}
sx={{ flex: 1, ...props?.sx, py: 3 }}
sx={{flex: 1, ...props?.sx, py: 3}}
>
{props.children}
</Stack>

View File

@@ -1,4 +1,4 @@
import { Stack } from "@mui/material";
import {Stack} from "@mui/material";
const FullPageLayout = (props) => {
return (

View File

@@ -1,17 +1,15 @@
import NoSsrHandler from "@/core/components/isBotHandler";
import {
createEmotionCacheRtl
} from "@/core/utils/createEmotionCache";
import {createEmotionCacheRtl} from "@/core/utils/createEmotionCache";
import themeRtl from "@/core/utils/theme-rtl";
import { CacheProvider } from "@emotion/react";
import { GlobalStyles } from "@mui/material";
import {CacheProvider} from "@emotion/react";
import {GlobalStyles} from "@mui/material";
import CssBaseline from "@mui/material/CssBaseline";
import { ThemeProvider } from "@mui/material/styles";
import {ThemeProvider} from "@mui/material/styles";
import Head from "next/head";
const clientSideEmotionCacheRtl = createEmotionCacheRtl();
const MuiLayout = ({ children, isBot }) => {
const MuiLayout = ({children, isBot}) => {
const emotionCache = clientSideEmotionCacheRtl;
@@ -20,7 +18,7 @@ const MuiLayout = ({ children, isBot }) => {
<NoSsrHandler isBot={isBot}>
<CacheProvider value={emotionCache}>
<Head>
<meta name="viewport" content="initial-scale=1, width=device-width" />
<meta name="viewport" content="initial-scale=1, width=device-width"/>
</Head>
<ThemeProvider theme={theme}>
<GlobalStyles
@@ -65,7 +63,7 @@ const MuiLayout = ({ children, isBot }) => {
}}
/>
<CssBaseline />
<CssBaseline/>
{children}
</ThemeProvider>
</CacheProvider>

View File

@@ -1,4 +1,4 @@
import { Box, Fade } from "@mui/material";
import {Box, Fade} from "@mui/material";
const ScrollableLayout = (props) => {
const overflowY = props?.y || "hidden";

View File

@@ -1,6 +1,6 @@
import LinkRouting from "@/core/components/LinkRouting";
import { Typography } from "@mui/material";
import { useTranslations } from "next-intl";
import {Typography} from "@mui/material";
import {useTranslations} from "next-intl";
export default function BreadcrumbItem(props) {
const t = useTranslations();

View File

@@ -1,11 +1,11 @@
import { useRouter } from "next/router";
import { Box, Breadcrumbs } from "@mui/material";
import { useTheme } from "@mui/material/styles";
import { NavigateBefore, NavigateNext } from "@mui/icons-material";
import {useRouter} from "next/router";
import {Box, Breadcrumbs} from "@mui/material";
import {useTheme} from "@mui/material/styles";
import {NavigateBefore, NavigateNext} from "@mui/icons-material";
import BreadcrumbItem from "./BreadcrumbItem";
const BreadCrumbs = (props) => {
const { isVisible } = props;
const {isVisible} = props;
const theme = useTheme();
const router = useRouter();
@@ -13,7 +13,7 @@ const BreadCrumbs = (props) => {
return null;
}
const { pathname } = router;
const {pathname} = router;
const RouterArray = pathname.split("/").filter((segment) => segment !== "");
if (RouterArray.length === 1) {
@@ -26,9 +26,9 @@ const BreadCrumbs = (props) => {
maxItems={2}
separator={
theme.direction === "ltr" ? (
<NavigateNext fontSize="small" />
<NavigateNext fontSize="small"/>
) : (
<NavigateBefore fontSize="small" />
<NavigateBefore fontSize="small"/>
)
}
aria-label="breadcrumb"

View File

@@ -1,12 +1,12 @@
import { Avatar, Stack, Typography } from "@mui/material";
import {Avatar, Stack} from "@mui/material";
import useUser from "@/lib/app/hooks/useUser";
export default function ProfileData() {
const { user } = useUser();
const {user} = useUser();
return (
<Stack alignItems="center" spacing={2} sx={{ p: 3 }}>
<Stack alignItems="center" spacing={2} sx={{p: 3}}>
<Avatar
sx={{ width: "80px", height: "80px" }}
sx={{width: "80px", height: "80px"}}
alt="User Image"
src={user.user_avatar}
/>

View File

@@ -1,14 +1,14 @@
import { Avatar, Menu, IconButton, Tooltip } from "@mui/material";
import { useState } from "react";
import {Avatar, IconButton, Menu, Tooltip} from "@mui/material";
import {useState} from "react";
import ProfileData from "./ProfileData";
import ProfileOptions from "./ProfileOptions";
import { useTranslations } from "next-intl";
import {useTranslations} from "next-intl";
import useUser from "@/lib/app/hooks/useUser";
function ProfileMenu() {
const t = useTranslations();
const [anchorElUser, setAnchorElUser] = useState(null);
const { user } = useUser();
const {user} = useUser();
const handleOpenUserMenu = (event) => {
setAnchorElUser(event.currentTarget);
@@ -20,7 +20,7 @@ function ProfileMenu() {
return (
<>
<Tooltip title={t("header.open_profile")} arrow>
<IconButton onClick={handleOpenUserMenu} sx={{ p: 0 }}>
<IconButton onClick={handleOpenUserMenu} sx={{p: 0}}>
<Avatar
sx={{
width: 24,
@@ -34,7 +34,7 @@ function ProfileMenu() {
</IconButton>
</Tooltip>
<Menu
MenuListProps={{ sx: { py: 0 } }}
MenuListProps={{sx: {py: 0}}}
sx={{
mt: 6,
}}
@@ -52,10 +52,11 @@ function ProfileMenu() {
open={Boolean(anchorElUser)}
onClose={handleCloseUserMenu}
>
<ProfileData />
<ProfileOptions handleCloseUserMenu={handleCloseUserMenu} />
<ProfileData/>
<ProfileOptions handleCloseUserMenu={handleCloseUserMenu}/>
</Menu>
</>
);
}
export default ProfileMenu;

View File

@@ -1,11 +1,11 @@
import { Box, Button, MenuItem, Typography } from "@mui/material";
import {Box, Button, MenuItem, Typography} from "@mui/material";
import MeetingRoomIcon from "@mui/icons-material/MeetingRoom";
import useUser from "@/lib/app/hooks/useUser";
import { useTranslations } from "next-intl";
import {useTranslations} from "next-intl";
export default function ProfileOptionLogOut({ handleCloseUserMenu }) {
export default function ProfileOptionLogOut({handleCloseUserMenu}) {
const t = useTranslations();
const { clearToken } = useUser();
const {clearToken} = useUser();
const handleClickLogOut = () => {
handleCloseUserMenu();
clearToken();
@@ -28,7 +28,7 @@ export default function ProfileOptionLogOut({ handleCloseUserMenu }) {
}}
onClick={handleClickLogOut}
>
<Box sx={{ display: "flex", alignItems: "center", flex: 1 }}>
<Box sx={{display: "flex", alignItems: "center", flex: 1}}>
<Box
sx={{
display: "flex",
@@ -37,9 +37,9 @@ export default function ProfileOptionLogOut({ handleCloseUserMenu }) {
pr: 2,
}}
>
<MeetingRoomIcon />
<MeetingRoomIcon/>
</Box>
<Typography sx={{ flex: 1 }} textAlign="start">
<Typography sx={{flex: 1}} textAlign="start">
{t("header.logout")}
</Typography>
</Box>

View File

@@ -1,10 +1,10 @@
import { Box, MenuItem, Typography } from "@mui/material";
import { NextLinkComposed } from "@/core/components/LinkRouting";
import { useTranslations } from "next-intl";
import {Box, MenuItem, Typography} from "@mui/material";
import {NextLinkComposed} from "@/core/components/LinkRouting";
import {useTranslations} from "next-intl";
import headerProfileItems from "@/core/data/headerProfileItems";
import ProfileOptionLogOut from "./ProfileOptionLogOut";
export default function ProfileOptions({ handleCloseUserMenu }) {
export default function ProfileOptions({handleCloseUserMenu}) {
const t = useTranslations();
return (
@@ -26,7 +26,7 @@ export default function ProfileOptions({ handleCloseUserMenu }) {
key={profile_item.key}
onClick={handleCloseUserMenu}
>
<Box sx={{ display: "flex", alignItems: "center", flex: 1 }}>
<Box sx={{display: "flex", alignItems: "center", flex: 1}}>
<Box
sx={{
display: "flex",
@@ -37,13 +37,13 @@ export default function ProfileOptions({ handleCloseUserMenu }) {
>
{profile_item.icon}
</Box>
<Typography sx={{ flex: 1 }} textAlign="start">
<Typography sx={{flex: 1}} textAlign="start">
{t(profile_item.name)}
</Typography>
</Box>
</MenuItem>
))}
<ProfileOptionLogOut handleCloseUserMenu={handleCloseUserMenu} />
<ProfileOptionLogOut handleCloseUserMenu={handleCloseUserMenu}/>
</>
);
}

View File

@@ -1,27 +1,18 @@
import MenuIcon from "@mui/icons-material/Menu";
import {
AppBar,
Box,
Container,
CssBaseline,
IconButton,
Stack,
Toolbar,
useTheme
} from "@mui/material";
import {AppBar, Box, Container, CssBaseline, IconButton, Stack, Toolbar, useTheme} from "@mui/material";
import ProfileMenu from "./ProfileMenu";
function Header({ drawerWidth, handleDrawerToggle }) {
function Header({drawerWidth, handleDrawerToggle}) {
const theme = useTheme();
return (
<>
<CssBaseline />
<CssBaseline/>
<AppBar
position="fixed"
sx={{
width: { md: `calc(100% - ${drawerWidth}px)` },
ml: { md: `${drawerWidth}px` },
width: {md: `calc(100% - ${drawerWidth}px)`},
ml: {md: `${drawerWidth}px`},
}}
>
<Container maxWidth="xxl">
@@ -31,15 +22,15 @@ function Header({ drawerWidth, handleDrawerToggle }) {
display: "flex",
}}
>
<Stack direction="row" justifyContent="flex-start" sx={{ flex: 1 }}>
<Stack direction="row" justifyContent="flex-start" sx={{flex: 1}}>
<IconButton
color="inherit"
aria-label="open drawer"
onClick={handleDrawerToggle}
edge="start"
sx={{ display: { md: "none" }, m: 0 }}
sx={{display: {md: "none"}, m: 0}}
>
<MenuIcon />
<MenuIcon/>
</IconButton>
</Stack>
<Stack
@@ -57,7 +48,7 @@ function Header({ drawerWidth, handleDrawerToggle }) {
my: 1,
width: 56,
height: 56,
"@media (min-width:600px)": { maxWidth: 64, maxHeight: 64 },
"@media (min-width:600px)": {maxWidth: 64, maxHeight: 64},
"@media (min-width:0px)": {
"@media (orientation: landscape)": {
width: 48,
@@ -68,8 +59,8 @@ function Header({ drawerWidth, handleDrawerToggle }) {
>
</Box>
</Stack>
<Stack direction="row" justifyContent="flex-end" sx={{ flex: 1 }}>
<ProfileMenu />
<Stack direction="row" justifyContent="flex-end" sx={{flex: 1}}>
<ProfileMenu/>
</Stack>
</Toolbar>
</Container>
@@ -77,4 +68,5 @@ function Header({ drawerWidth, handleDrawerToggle }) {
</>
);
}
export default Header;

View File

@@ -1,18 +1,18 @@
import { useState } from "react";
import {useState} from "react";
import FullPageLayout from "../FullPageLayout";
import Header from "./header";
import Sidebar from "./sidebar";
import { Toolbar } from "@mui/material";
import {Toolbar} from "@mui/material";
import BreadCrumbs from "./breadcrumbs";
import { ToastContainer } from "react-toastify";
import {ToastContainer} from "react-toastify";
import "react-toastify/dist/ReactToastify.css";
import useDirection from "@/lib/app/hooks/useDirection";
const drawerWidth = 240;
const DashboardLayouts = (props) => {
const { directionApp } = useDirection();
const { window } = props;
const {directionApp} = useDirection();
const {window} = props;
const [mobileOpen, setMobileOpen] = useState(false);
const container =
window !== undefined ? () => window().document.body : undefined;
@@ -34,15 +34,15 @@ const DashboardLayouts = (props) => {
/>
<FullPageLayout
component="main"
sx={{ flexGrow: 1, width: { sm: `calc(100% - ${drawerWidth}px)` } }}
sx={{flexGrow: 1, width: {sm: `calc(100% - ${drawerWidth}px)`}}}
>
<Toolbar />
<FullPageLayout sx={{ mt: 3 }}>
<BreadCrumbs isVisible={true} />
<Toolbar/>
<FullPageLayout sx={{mt: 3}}>
<BreadCrumbs isVisible={true}/>
{props.children}
</FullPageLayout>
</FullPageLayout>
{directionApp === "rtl" ? <ToastContainer rtl /> : <ToastContainer ltr />}
{directionApp === "rtl" ? <ToastContainer rtl/> : <ToastContainer ltr/>}
</FullPageLayout>
);
};

View File

@@ -1,24 +1,24 @@
import useUser from "@/lib/app/hooks/useUser";
import { Divider, Stack, Toolbar, Typography } from "@mui/material";
import { useTranslations } from "next-intl";
import {Divider, Stack, Toolbar, Typography} from "@mui/material";
import {useTranslations} from "next-intl";
import SidebarList from "./SidebarList";
const SidebarDrawer = ({ handleDrawerToggle }) => {
const { user } = useUser();
const SidebarDrawer = ({handleDrawerToggle}) => {
const {user} = useUser();
const t = useTranslations();
return (
<>
<Toolbar>
<Stack>
<Typography variant="h6" sx={{ color: "primary.main" }}>
<Typography variant="h6" sx={{color: "primary.main"}}>
{t("app_short_name")}
</Typography>
<Typography variant="caption">{user.type_name}</Typography>
</Stack>
</Toolbar>
<Divider />
<SidebarList handleDrawerToggle={handleDrawerToggle} />
<Divider/>
<SidebarList handleDrawerToggle={handleDrawerToggle}/>
</>
);
};

View File

@@ -1,8 +1,8 @@
import { Divider, List } from "@mui/material";
import { Fragment, useEffect, useReducer } from "react";
import {Divider, List} from "@mui/material";
import {Fragment, useEffect, useReducer} from "react";
import SidebarListItem from "./SidebarListItem";
import sidebarMenu from "@/core/data/sidebarMenu";
import { useRouter } from "next/router";
import {useRouter} from "next/router";
function reducer(state, action) {
switch (action.type) {
@@ -10,7 +10,7 @@ function reducer(state, action) {
return state.map((itemsArr) =>
itemsArr.map((item) =>
action.key == item.key
? { ...item, showSubItem: !item.showSubItem }
? {...item, showSubItem: !item.showSubItem}
: item
)
);
@@ -18,8 +18,8 @@ function reducer(state, action) {
return state.map((itemsArr) =>
itemsArr.map((item) =>
action.route == item.route
? { ...item, selected: true }
: { ...item, selected: false }
? {...item, selected: true}
: {...item, selected: false}
)
);
default:
@@ -27,13 +27,13 @@ function reducer(state, action) {
}
}
export default function SidebarList({ handleDrawerToggle }) {
export default function SidebarList({handleDrawerToggle}) {
const [itemMenu, dispatch] = useReducer(reducer, sidebarMenu);
// activate current page in menu
const router = useRouter();
useEffect(() => {
dispatch({ type: "SELECTED", route: router.pathname });
dispatch({type: "SELECTED", route: router.pathname});
}, [router.pathname]);
return (
@@ -48,7 +48,7 @@ export default function SidebarList({ handleDrawerToggle }) {
handleDrawerToggle={handleDrawerToggle}
/>
))}
<Divider />
<Divider/>
</Fragment>
))}
</List>

View File

@@ -1,22 +1,17 @@
import { NextLinkComposed } from "@/core/components/LinkRouting";
import {NextLinkComposed} from "@/core/components/LinkRouting";
import ExpandLess from "@mui/icons-material/ExpandLess";
import ExpandMore from "@mui/icons-material/ExpandMore";
import {
ListItem,
ListItemButton,
ListItemIcon,
ListItemText,
} from "@mui/material";
import { useTranslations } from "next-intl";
import { Fragment } from "react";
import {ListItem, ListItemButton, ListItemIcon, ListItemText,} from "@mui/material";
import {useTranslations} from "next-intl";
import {Fragment} from "react";
import SidebarListSubItem from "./SidebarListSubItem";
const SidebarListItem = ({ item, dispatch, handleDrawerToggle }) => {
const SidebarListItem = ({item, dispatch, handleDrawerToggle}) => {
const t = useTranslations();
return (
<Fragment key={item.key}>
<ListItem disablePadding sx={{ display: "block" }}>
<ListItem disablePadding sx={{display: "block"}}>
<ListItemButton
selected={item.selected}
{...(item.type == "page" && {
@@ -27,7 +22,7 @@ const SidebarListItem = ({ item, dispatch, handleDrawerToggle }) => {
})}
onClick={() => {
if (item.type == "menu") {
dispatch({ type: "COLLAPSE_MENU", key: item.key });
dispatch({type: "COLLAPSE_MENU", key: item.key});
}
handleDrawerToggle();
}}
@@ -45,10 +40,10 @@ const SidebarListItem = ({ item, dispatch, handleDrawerToggle }) => {
>
{item.icon}
</ListItemIcon>
<ListItemText primary={t(item.key)} />
<ListItemText primary={t(item.key)}/>
{item.type == "menu" &&
(item.showSubItem ? <ExpandLess /> : <ExpandMore />)}
(item.showSubItem ? <ExpandLess/> : <ExpandMore/>)}
</ListItemButton>
</ListItem>
{item.subItem && (

View File

@@ -1,21 +1,15 @@
import { NextLinkComposed } from "@/core/components/LinkRouting";
import {NextLinkComposed} from "@/core/components/LinkRouting";
import InboxIcon from "@mui/icons-material/MoveToInbox";
import {
Collapse,
List,
ListItemButton,
ListItemIcon,
ListItemText,
} from "@mui/material";
import { useTranslations } from "next-intl";
import { Fragment } from "react";
import {Collapse, List, ListItemButton, ListItemIcon, ListItemText,} from "@mui/material";
import {useTranslations} from "next-intl";
import {Fragment} from "react";
const SidebarListSubItem = ({ item, handleDrawerToggle }) => {
const SidebarListSubItem = ({item, handleDrawerToggle}) => {
const t = useTranslations();
return (
<Collapse in={item.showSubItem} timeout="auto" unmountOnExit>
<List component="div" disablePadding sx={{ bgcolor: "#f6f6f6" }}>
<List component="div" disablePadding sx={{bgcolor: "#f6f6f6"}}>
{item.subItem.map((subitem, index) => (
<Fragment key={subitem.key}>
<ListItemButton
@@ -28,7 +22,7 @@ const SidebarListSubItem = ({ item, handleDrawerToggle }) => {
}}
onClick={(event) => {
if (item.type == "menu") {
dispatch({ type: "COLLAPSE_MENU", key: item.key });
dispatch({type: "COLLAPSE_MENU", key: item.key});
}
handleDrawerToggle();
}}
@@ -40,9 +34,9 @@ const SidebarListSubItem = ({ item, handleDrawerToggle }) => {
pr: 2,
}}
>
<InboxIcon />
<InboxIcon/>
</ListItemIcon>
<ListItemText primary={t(subitem.key)} />
<ListItemText primary={t(subitem.key)}/>
</ListItemButton>
</Fragment>
))}

View File

@@ -1,11 +1,11 @@
import { Box, Drawer } from "@mui/material";
import {Box, Drawer} from "@mui/material";
import SidebarDrawer from "./SidebarDrawer";
const Sidebar = (props) => {
return (
<Box
component="nav"
sx={{ width: { md: props.drawerWidth }, flexShrink: { sm: 0 } }}
sx={{width: {md: props.drawerWidth}, flexShrink: {sm: 0}}}
aria-label="mailbox folders"
>
<Drawer
@@ -17,19 +17,19 @@ const Sidebar = (props) => {
keepMounted: true,
}}
sx={{
display: { xs: "block", md: "none" },
display: {xs: "block", md: "none"},
"& .MuiDrawer-paper": {
boxSizing: "border-box",
width: props.drawerWidth,
},
}}
>
<SidebarDrawer handleDrawerToggle={props.handleDrawerToggle} />
<SidebarDrawer handleDrawerToggle={props.handleDrawerToggle}/>
</Drawer>
<Drawer
variant="permanent"
sx={{
display: { xs: "none", md: "block" },
display: {xs: "none", md: "block"},
"& .MuiDrawer-paper": {
boxSizing: "border-box",
width: props.drawerWidth,
@@ -37,7 +37,7 @@ const Sidebar = (props) => {
}}
open
>
<SidebarDrawer handleDrawerToggle={props.handleDrawerToggle} />
<SidebarDrawer handleDrawerToggle={props.handleDrawerToggle}/>
</Drawer>
</Box>
);

View File

@@ -1,11 +1,11 @@
import { FA_DATATABLE_LOCALIZATION } from "&/locales/fa/datatable";
import { useRouter } from "next/router";
import { createContext, useEffect, useState } from "react";
import {FA_DATATABLE_LOCALIZATION} from "&/locales/fa/datatable";
import {useRouter} from "next/router";
import {createContext, useEffect, useState} from "react";
import useUser from "../hooks/useUser";
export const LanguageContext = createContext();
export const LanguageProvider = ({ children }) => {
export const LanguageProvider = ({children}) => {
const router = useRouter();
const languageList = [
{
@@ -16,7 +16,7 @@ export const LanguageProvider = ({ children }) => {
tableLocalization: FA_DATATABLE_LOCALIZATION,
}
];
const { user, userChangedLanguage, changeLanguageState } = useUser();
const {user, userChangedLanguage, changeLanguageState} = useUser();
const [languageIsReady, setLanguageIsReady] = useState(false);
const [languageApp, setLanguageApp] = useState();
const [directionApp, setDirectionApp] = useState(
@@ -58,7 +58,7 @@ export const LanguageProvider = ({ children }) => {
if (languageApp != router.locale) {
router.replace(
{ pathname: router.pathname, query: router.query },
{pathname: router.pathname, query: router.query},
router.asPath,
{
locale: languageApp,

View File

@@ -1,13 +1,13 @@
import LoadingHardPage from "@/core/components/LoadingHardPage";
import { createContext, useState } from "react";
import {createContext, useState} from "react";
export const LoadingContext = createContext();
export const LoadingProvider = ({ children }) => {
export const LoadingProvider = ({children}) => {
const [loadingPage, setLoadingPage] = useState(false);
return (
<LoadingContext.Provider value={{ loadingPage, setLoadingPage }}>
<LoadingHardPage loading={loadingPage} />
<LoadingContext.Provider value={{loadingPage, setLoadingPage}}>
<LoadingHardPage loading={loadingPage}/>
{children}
</LoadingContext.Provider>
);

View File

@@ -1,6 +1,6 @@
import { USER_INFO } from "@/core/data/apiRoutes";
import {USER_INFO} from "@/core/data/apiRoutes";
import axios from "axios";
import { createContext, useCallback, useEffect, useReducer } from "react";
import {createContext, useCallback, useEffect, useReducer} from "react";
const initialUser = {
isAuth: false,
@@ -12,24 +12,24 @@ const initialUser = {
const reducer = (state, action) => {
switch (action.type) {
case "CLEAR_USER":
return { ...state, user: {} };
return {...state, user: {}};
case "CHANGE_USER":
return { ...state, user: action.user };
return {...state, user: action.user};
case "CHANGE_USER_LANGUAGE":
return {
...state,
user: { ...state.user, user_language: action.language },
user: {...state.user, user_language: action.language},
};
case "CHANGE_AUTH_STATE":
return { ...state, isAuth: action.isAuth };
return {...state, isAuth: action.isAuth};
case "CHANGE_LANGUAGE_STATE":
return { ...state, userChangedLanguage: action.userChangedLanguage };
return {...state, userChangedLanguage: action.userChangedLanguage};
case "CLEAR_TOKEN":
localStorage.removeItem("_token");
return { ...state, token: null };
return {...state, token: null};
case "SET_TOKEN":
localStorage.setItem("_token", action.token);
return { ...state, token: action.token };
return {...state, token: action.token};
default:
return state;
}
@@ -37,42 +37,43 @@ const reducer = (state, action) => {
export const UserContext = createContext();
export const UserProvider = ({ children }) => {
export const UserProvider = ({children}) => {
const [state, dispatch] = useReducer(reducer, initialUser);
const clearUser = useCallback(() => {
dispatch({ type: "CLEAR_USER" });
dispatch({type: "CLEAR_USER"});
}, []);
const changeUser = useCallback((user) => {
dispatch({ type: "CHANGE_USER", user });
dispatch({type: "CHANGE_USER", user});
}, []);
const changeUserLanguage = useCallback(/* for multi language app */);
const changeAuthState = useCallback((isAuth) => {
dispatch({ type: "CHANGE_AUTH_STATE", isAuth });
dispatch({type: "CHANGE_AUTH_STATE", isAuth});
}, []);
const changeLanguageState = useCallback((userChangedLanguage) => {
dispatch({ type: "CHANGE_LANGUAGE_STATE", userChangedLanguage });
dispatch({type: "CHANGE_LANGUAGE_STATE", userChangedLanguage});
}, []);
const clearToken = useCallback(() => {
dispatch({ type: "CLEAR_TOKEN" });
dispatch({type: "CLEAR_TOKEN"});
}, []);
const setToken = useCallback((token) => {
dispatch({ type: "SET_TOKEN", token });
dispatch({type: "SET_TOKEN", token});
}, []);
const getUser = useCallback(
(callback = () => {}) => {
(callback = () => {
}) => {
axios
.get(USER_INFO, {
headers: { authorization: `Bearer ${state.token}` },
headers: {authorization: `Bearer ${state.token}`},
})
.then(({ data }) => {
.then(({data}) => {
if (typeof callback === "function") callback(data);
});
},
@@ -81,7 +82,7 @@ export const UserProvider = ({ children }) => {
useEffect(() => {
const localToken = localStorage.getItem("_token");
if (localToken) dispatch({ type: "SET_TOKEN", token: localToken });
if (localToken) dispatch({type: "SET_TOKEN", token: localToken});
}, []);
useEffect(() => {

View File

@@ -1,10 +1,10 @@
import { useContext } from "react";
import { LanguageContext } from "../contexts/language";
import {useContext} from "react";
import {LanguageContext} from "../contexts/language";
const useDirection = () => {
const { directionApp } = useContext(LanguageContext);
const {directionApp} = useContext(LanguageContext);
return { directionApp };
return {directionApp};
};
export default useDirection;

View File

@@ -1,9 +1,9 @@
import { useContext } from "react";
import { LanguageContext } from "../contexts/language";
import {useContext} from "react";
import {LanguageContext} from "../contexts/language";
import useUser from "./useUser";
const useLanguage = () => {
const { isAuth, changeUserLanguage } = useUser();
const {isAuth, changeUserLanguage} = useUser();
const {
languageApp,
setLanguageApp,
@@ -22,7 +22,7 @@ const useLanguage = () => {
}
};
return { languageApp, changeLanguage, languageIsReady, languageList };
return {languageApp, changeLanguage, languageIsReady, languageList};
};
export default useLanguage;

View File

@@ -1,10 +1,10 @@
import { useContext } from "react";
import { LoadingContext } from "../contexts/loading";
import {useContext} from "react";
import {LoadingContext} from "../contexts/loading";
const useLoading = () => {
const { setLoadingPage } = useContext(LoadingContext);
const {setLoadingPage} = useContext(LoadingContext);
return { setLoadingPage };
return {setLoadingPage};
};
export default useLoading;

View File

@@ -1,5 +1,5 @@
import { useContext } from "react";
import { UserContext } from "../contexts/user";
import {useContext} from "react";
import {UserContext} from "../contexts/user";
const useUser = () => {
const {

View File

@@ -1,12 +1,12 @@
import { NextLinkComposed } from "@/core/components/LinkRouting";
import {NextLinkComposed} from "@/core/components/LinkRouting";
import Message from "@/core/components/Messages";
import useUser from "@/lib/app/hooks/useUser";
import { Button, Typography } from "@mui/material";
import { useTranslations } from "next-intl";
import { useRouter } from "next/router";
import {Button, Typography} from "@mui/material";
import {useTranslations} from "next-intl";
import {useRouter} from "next/router";
const WithAuthMiddleware = ({ children }) => {
const { isAuth } = useUser();
const WithAuthMiddleware = ({children}) => {
const {isAuth} = useUser();
const t = useTranslations();
const router = useRouter();
@@ -14,7 +14,7 @@ const WithAuthMiddleware = ({ children }) => {
return (
<Message
text={
<Typography sx={{ textAlign: "center" }}>
<Typography sx={{textAlign: "center"}}>
{t(
"Authorization.typography_your_access_to_this_page_has_expired_Please_login_again"
)}

View File

@@ -1,13 +1,13 @@
import Message from "@/core/components/Messages";
import useUser from "@/lib/app/hooks/useUser";
import { Stack, Typography } from "@mui/material";
import { useTranslations } from "next-intl";
import { useSearchParams } from "next/navigation";
import { useRouter } from "next/router";
import { useEffect } from "react";
import {Stack, Typography} from "@mui/material";
import {useTranslations} from "next-intl";
import {useSearchParams} from "next/navigation";
import {useRouter} from "next/router";
import {useEffect} from "react";
const WithoutAuthMiddleware = ({ children }) => {
const { isAuth } = useUser();
const WithoutAuthMiddleware = ({children}) => {
const {isAuth} = useUser();
const t = useTranslations();
const router = useRouter();
@@ -35,7 +35,7 @@ const WithoutAuthMiddleware = ({ children }) => {
<Message
text={
<Stack alignItems="center" spacing={2}>
<Typography sx={{ textAlign: "center" }}>
<Typography sx={{textAlign: "center"}}>
{t(
"Authorization.typography_your_login_is_valid_and_you_do_not_need_to_login_again"
)}

View File

@@ -7,7 +7,7 @@ export default function NotFound() {
<Head>
<title>یافت نشد</title>
</Head>
<NotFoundComponent />
<NotFoundComponent/>
</>
);
}

View File

@@ -1,13 +1,13 @@
import "&/fontiran.scss";
import AppLayout from "@/layouts/AppLayout";
import MuiLayout from "@/layouts/MuiLayout";
import { LanguageProvider } from "@/lib/app/contexts/language";
import { LoadingProvider } from "@/lib/app/contexts/loading";
import { UserProvider } from "@/lib/app/contexts/user";
import {LanguageProvider} from "@/lib/app/contexts/language";
import {LoadingProvider} from "@/lib/app/contexts/loading";
import {UserProvider} from "@/lib/app/contexts/user";
import "moment/locale/fa";
import { NextIntlProvider } from "next-intl";
import {NextIntlProvider} from "next-intl";
const App = ({ Component, pageProps }) => {
const App = ({Component, pageProps}) => {
return (
<>
<UserProvider>

View File

@@ -1,20 +1,18 @@
import {
createEmotionCacheLtr
} from "@/core/utils/createEmotionCache";
import {createEmotionCacheLtr} from "@/core/utils/createEmotionCache";
import theme from "@/core/utils/theme";
import createEmotionServer from "@emotion/server/create-instance";
import Document, { Head, Html, Main, NextScript } from "next/document";
import Document, {Head, Html, Main, NextScript} from "next/document";
export default function MyDocument(props) {
const { emotionStyleTags } = props;
const {emotionStyleTags} = props;
return (
<Html>
<Head>
<meta name="theme-color" content={theme.palette.primary.main} />
<meta name="emotion-insertion-point" content="" />
<link rel="shortcut icon" href="/icons/favicon.ico" />
<link rel="manifest" href="/manifest.json" />
<meta name="theme-color" content={theme.palette.primary.main}/>
<meta name="emotion-insertion-point" content=""/>
<link rel="shortcut icon" href="/icons/favicon.ico"/>
<link rel="manifest" href="/manifest.json"/>
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap"
@@ -22,8 +20,8 @@ export default function MyDocument(props) {
{emotionStyleTags}
</Head>
<body>
<Main />
<NextScript />
<Main/>
<NextScript/>
</body>
</Html>
);
@@ -38,7 +36,7 @@ MyDocument.getInitialProps = async (ctx) => {
break;
}
const { extractCriticalToChunks } = createEmotionServer(cache);
const {extractCriticalToChunks} = createEmotionServer(cache);
ctx.renderPage = () =>
originalRenderPage({
@@ -56,7 +54,7 @@ MyDocument.getInitialProps = async (ctx) => {
data-emotion={`${style.key} ${style.ids.join(" ")}`}
key={style.key}
// eslint-disable-next-line react/no-danger
dangerouslySetInnerHTML={{ __html: style.css }}
dangerouslySetInnerHTML={{__html: style.css}}
/>
));

View File

@@ -1,19 +1,19 @@
import DashboardFirstComponent from "@/components/dashboard/first";
import TitlePage from "@/core/components/TitlePage";
import WithAuthMiddleware from "@/middlewares/WithAuth";
import { parse } from "next-useragent";
import {parse} from "next-useragent";
export default function Dashboard() {
return (
<WithAuthMiddleware>
<TitlePage text="Dashboard.dashboard_page" />
<DashboardFirstComponent />
<TitlePage text="Dashboard.dashboard_page"/>
<DashboardFirstComponent/>
</WithAuthMiddleware>
);
}
export async function getServerSideProps({ req, locale }) {
const { isBot } = parse(req.headers["user-agent"]);
export async function getServerSideProps({req, locale}) {
const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
messages: (await import(`&/locales/${locale}/app.json`)).default,

View File

@@ -1,19 +1,19 @@
import DashboardLoanFollowUpComponent from "@/components/dashboard/loan-follow-up";
import TitlePage from "@/core/components/TitlePage";
import WithAuthMiddleware from "@/middlewares/WithAuth";
import { parse } from "next-useragent";
import {parse} from "next-useragent";
export default function LoanFollowUp() {
return (
<WithAuthMiddleware>
<TitlePage text="LoanFollowUp.loan_follow_up_page" />
<DashboardLoanFollowUpComponent />
<TitlePage text="LoanFollowUp.loan_follow_up_page"/>
<DashboardLoanFollowUpComponent/>
</WithAuthMiddleware>
);
}
export async function getServerSideProps({ req, locale }) {
const { isBot } = parse(req.headers["user-agent"]);
export async function getServerSideProps({req, locale}) {
const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
messages: (await import(`&/locales/${locale}/app.json`)).default,

View File

@@ -1,19 +1,19 @@
import DashboardLoanRequestComponent from "@/components/dashboard/loan-request";
import TitlePage from "@/core/components/TitlePage";
import WithAuthMiddleware from "@/middlewares/WithAuth";
import { parse } from "next-useragent";
import {parse} from "next-useragent";
export default function LoanRequest() {
return (
<WithAuthMiddleware>
<TitlePage text="LoanFollowUp.loan_follow_up_page" />
<DashboardLoanRequestComponent />
<TitlePage text="LoanFollowUp.loan_follow_up_page"/>
<DashboardLoanRequestComponent/>
</WithAuthMiddleware>
);
}
export async function getServerSideProps({ req, locale }) {
const { isBot } = parse(req.headers["user-agent"]);
export async function getServerSideProps({req, locale}) {
const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
messages: (await import(`&/locales/${locale}/app.json`)).default,

View File

@@ -1,18 +1,18 @@
import FirstComponent from "@/components/first";
import TitlePage from "@/core/components/TitlePage";
import { parse } from "next-useragent";
import {parse} from "next-useragent";
export default function Home() {
return (
<>
<TitlePage text="first_page" />
<FirstComponent />
<TitlePage text="first_page"/>
<FirstComponent/>
</>
);
}
export async function getServerSideProps({ req, locale }) {
const { isBot } = parse(req.headers["user-agent"]);
export async function getServerSideProps({req, locale}) {
const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
messages: (await import(`&/locales/${locale}/app.json`)).default,

View File

@@ -1,24 +1,24 @@
import LoginComponent from "@/components/login";
import TitlePage from "@/core/components/TitlePage";
import WithoutAuthMiddleware from "@/middlewares/WithoutAuth";
import { parse } from "next-useragent";
import {parse} from "next-useragent";
import "react-toastify/dist/ReactToastify.css";
import { ToastContainer } from "react-toastify";
import {ToastContainer} from "react-toastify";
import useDirection from "@/lib/app/hooks/useDirection";
export default function Login() {
const { directionApp } = useDirection();
const {directionApp} = useDirection();
return (
<WithoutAuthMiddleware>
<TitlePage text="Titles.title_login_page" />
<LoginComponent />
{directionApp === "rtl" ? <ToastContainer rtl /> : <ToastContainer ltr />}
<TitlePage text="Titles.title_login_page"/>
<LoginComponent/>
{directionApp === "rtl" ? <ToastContainer rtl/> : <ToastContainer ltr/>}
</WithoutAuthMiddleware>
);
}
export async function getServerSideProps({ req, locale }) {
const { isBot } = parse(req.headers["user-agent"]);
export async function getServerSideProps({req, locale}) {
const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
messages: (await import(`&/locales/${locale}/app.json`)).default,

View File

@@ -1,24 +1,24 @@
import RegisterComponent from "@/components/register";
import TitlePage from "@/core/components/TitlePage";
import WithoutAuthMiddleware from "@/middlewares/WithoutAuth";
import { parse } from "next-useragent";
import {parse} from "next-useragent";
import "react-toastify/dist/ReactToastify.css";
import { ToastContainer } from "react-toastify";
import {ToastContainer} from "react-toastify";
import useDirection from "@/lib/app/hooks/useDirection";
export default function Register() {
const { directionApp } = useDirection();
const {directionApp} = useDirection();
return (
<WithoutAuthMiddleware>
<TitlePage text="Titles.title_register_page" />
<RegisterComponent />
{directionApp === "rtl" ? <ToastContainer rtl /> : <ToastContainer ltr />}
<TitlePage text="Titles.title_register_page"/>
<RegisterComponent/>
{directionApp === "rtl" ? <ToastContainer rtl/> : <ToastContainer ltr/>}
</WithoutAuthMiddleware>
);
}
export async function getServerSideProps({ req, locale }) {
const { isBot } = parse(req.headers["user-agent"]);
export async function getServerSideProps({req, locale}) {
const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
messages: (await import(`&/locales/${locale}/app.json`)).default,

View File

@@ -1,24 +1,24 @@
import NavyComponent from "@/components/register/navy";
import TitlePage from "@/core/components/TitlePage";
import WithoutAuthMiddleware from "@/middlewares/WithoutAuth";
import { parse } from "next-useragent";
import {parse} from "next-useragent";
import "react-toastify/dist/ReactToastify.css";
import { ToastContainer } from "react-toastify";
import {ToastContainer} from "react-toastify";
import useDirection from "@/lib/app/hooks/useDirection";
export default function Register() {
const { directionApp } = useDirection();
const {directionApp} = useDirection();
return (
<WithoutAuthMiddleware>
<TitlePage text="Titles.title_register_navy_page" />
<NavyComponent />
{directionApp === "rtl" ? <ToastContainer rtl /> : <ToastContainer ltr />}
<TitlePage text="Titles.title_register_navy_page"/>
<NavyComponent/>
{directionApp === "rtl" ? <ToastContainer rtl/> : <ToastContainer ltr/>}
</WithoutAuthMiddleware>
);
}
export async function getServerSideProps({ req, locale }) {
const { isBot } = parse(req.headers["user-agent"]);
export async function getServerSideProps({req, locale}) {
const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
messages: (await import(`&/locales/${locale}/app.json`)).default,

View File

@@ -1,24 +1,24 @@
import WelfareServicesComponent from "@/components/register/welfare-services";
import TitlePage from "@/core/components/TitlePage";
import WithoutAuthMiddleware from "@/middlewares/WithoutAuth";
import { parse } from "next-useragent";
import {parse} from "next-useragent";
import "react-toastify/dist/ReactToastify.css";
import { ToastContainer } from "react-toastify";
import {ToastContainer} from "react-toastify";
import useDirection from "@/lib/app/hooks/useDirection";
export default function Register() {
const { directionApp } = useDirection();
const {directionApp} = useDirection();
return (
<WithoutAuthMiddleware>
<TitlePage text="Titles.title_register_welfare_services_page" />
<WelfareServicesComponent />
{directionApp === "rtl" ? <ToastContainer rtl /> : <ToastContainer ltr />}
<TitlePage text="Titles.title_register_welfare_services_page"/>
<WelfareServicesComponent/>
{directionApp === "rtl" ? <ToastContainer rtl/> : <ToastContainer ltr/>}
</WithoutAuthMiddleware>
);
}
export async function getServerSideProps({ req, locale }) {
const { isBot } = parse(req.headers["user-agent"]);
export async function getServerSideProps({req, locale}) {
const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
messages: (await import(`&/locales/${locale}/app.json`)).default,