Skip to content

Commit

Permalink
Fix nested-list management
Browse files Browse the repository at this point in the history
  • Loading branch information
invaders-xx committed Apr 24, 2024
1 parent f85d874 commit 2ee01e2
Show file tree
Hide file tree
Showing 32 changed files with 574 additions and 826 deletions.
110 changes: 1 addition & 109 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ To create a resources page, run the following command:
php artisan make:filament-resource ProductCategory
```

#### 2. Create Tree Widget
#### 2. Create Nested List Widget

Prepare the filament-nested-list Widget and show it in Resource page.

Expand Down Expand Up @@ -261,114 +261,6 @@ class ListProductCategories extends ListRecords
}
```

### Resources

Filament allows you to create a custom pages for resources, you also can create a nested list page that display
hierarchical
data.

#### Create a Page

To create a nested list page for resource, you can use:

```
php artisan make:filament-nested-list-page ProductCategoryNestedList --resource=ProductCategory
```

#### Register a Page to the resource

You must register the nested list page to a route in the static `getPages()` methods of your resource. For example:

``` php
public static function getPages(): array
{
return [
// ...
'tree-list' => Pages\ProductCategoryNestedList::route('/tree-list'),
];
}
```

#### Actions

Define the available "actions" for the nested list page using the `getActions()` and `getTreeActions()` methods of your
page
class.

The `getActions()` method defines actions that are displayed next to the page's heading:

```php
use Filament\Pages\Actions\CreateAction;

protected function getActions(): array
{
return [
CreateAction::make(),
// SAMPLE CODE, CAN DELETE
//\Filament\Pages\Actions\Action::make('sampleAction'),
];
}
```

The `getTreeActions()` method defines the actions that are displayed for each record in the nested list. For example:

```php
use Filament\Pages\Actions\Action;

protected function getTreeActions(): array
{
return [
Actions\ViewAction::make(),
Actions\EditAction::make(),
Actions\DeleteAction::make(),
];
}

```

Alternatively, you can use the `hasDeleteAction()`, `hasEditAction()`, and `hasViewAction()` methods to customize each
action individually.

``` php
protected function hasDeleteAction(): bool
{
return false;
}

protected function hasEditAction(): bool
{
return true;
}

protected function hasViewAction(): bool
{
return false;
}
```

### Pages

This plugin enables you to create tree pages in the admin panel. To create a nested list page for a model, use
the `make:filament-nested-list-page` command. For example, to create a nested list page for the ProductCategory model,
you can
run:

#### Create a Page

> **Tip: Note that you should make sure the model contains the required columns or already uses the `ModelNestedList`
trait**

```php
php artisan make:filament-nested-list-page ProductCategory --model=ProductCategory
```

#### Actions, Widgets and Icon for each record

Once you've created the nested list page, you can customize the available actions, widgets, and icon for each record.
You can
use the same methods as for resource pages. See the [Resource Page](#resources) for more information on how to
customize actions, widgets, and icons.

### Publishing Views

To publish the views, use:
Expand Down
195 changes: 194 additions & 1 deletion pint.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,196 @@
{
"preset": "laravel"
"preset": "laravel",
"notName": [
"*.blade.php"
],
"rules": {
"align_multiline_comment": true,
"array_indentation": true,
"array_syntax": true,
"assign_null_coalescing_to_coalesce_equal": true,
"backtick_to_shell_exec": true,
"binary_operator_spaces": true,
"blank_line_after_namespace": true,
"blank_line_after_opening_tag": true,
"blank_line_before_statement": true,
"blank_line_between_import_groups": true,
"braces": true,
"cast_spaces": true,
"class_attributes_separation": true,
"class_definition": true,
"class_reference_name_casing": true,
"clean_namespace": true,
"combine_consecutive_issets": true,
"combine_consecutive_unsets": true,
"compact_nullable_typehint": true,
"concat_space": {
"spacing": "one"
},
"constant_case": true,
"declare_equal_normalize": true,
"declare_parentheses": true,
"echo_tag_syntax": true,
"elseif": true,
"empty_loop_body": true,
"empty_loop_condition": true,
"encoding": true,
"escape_implicit_backslashes": true,
"explicit_indirect_variable": true,
"explicit_string_variable": true,
"full_opening_tag": true,
"fully_qualified_strict_types": true,
"function_declaration": true,
"function_typehint_space": true,
"general_phpdoc_tag_rename": true,
"global_namespace_import": true,
"heredoc_indentation": true,
"heredoc_to_nowdoc": true,
"include": true,
"increment_style": true,
"indentation_type": true,
"integer_literal_case": true,
"lambda_not_used_import": true,
"line_ending": true,
"linebreak_after_opening_tag": true,
"list_syntax": true,
"lowercase_cast": true,
"lowercase_keywords": true,
"lowercase_static_reference": true,
"magic_constant_casing": true,
"magic_method_casing": true,
"method_argument_space": true,
"method_chaining_indentation": true,
"multiline_comment_opening_closing": true,
"multiline_whitespace_before_semicolons": true,
"native_function_casing": true,
"native_function_type_declaration_casing": true,
"new_with_braces": true,
"no_alias_language_construct_call": true,
"no_alternative_syntax": true,
"no_binary_string": true,
"no_blank_lines_after_class_opening": true,
"no_blank_lines_after_phpdoc": true,
"no_break_comment": true,
"no_closing_tag": true,
"no_empty_comment": true,
"no_empty_phpdoc": true,
"no_empty_statement": true,
"no_extra_blank_lines": true,
"no_leading_import_slash": true,
"no_leading_namespace_whitespace": true,
"no_mixed_echo_print": true,
"no_multiline_whitespace_around_double_arrow": true,
"no_null_property_initialization": true,
"no_short_bool_cast": true,
"no_singleline_whitespace_before_semicolons": true,
"no_space_around_double_colon": true,
"no_spaces_after_function_name": true,
"no_spaces_around_offset": true,
"no_spaces_inside_parenthesis": true,
"no_superfluous_elseif": true,
"no_superfluous_phpdoc_tags": true,
"no_trailing_comma_in_singleline": true,
"no_trailing_whitespace": true,
"no_trailing_whitespace_in_comment": true,
"no_unneeded_control_parentheses": true,
"no_unneeded_curly_braces": true,
"no_unneeded_import_alias": true,
"no_unset_cast": true,
"no_unused_imports": true,
"no_useless_concat_operator": true,
"no_useless_else": true,
"no_useless_nullsafe_operator": true,
"no_useless_return": true,
"no_whitespace_before_comma_in_array": true,
"no_whitespace_in_blank_line": true,
"normalize_index_brace": true,
"object_operator_without_whitespace": true,
"octal_notation": true,
"operator_linebreak": true,
"ordered_class_elements": {
"order": [
"use_trait",
"case",
"constant",
"constant_public",
"constant_protected",
"constant_private",
"property_public",
"property_protected",
"property_private",
"construct",
"destruct",
"magic",
"phpunit",
"method_abstract",
"method_public_static",
"method_public",
"method_protected_static",
"method_protected",
"method_private_static",
"method_private"
],
"sort_algorithm": "none"
},
"ordered_imports": {
"sort_algorithm": "alpha"
},
"phpdoc_add_missing_param_annotation": true,
"phpdoc_align": true,
"phpdoc_annotation_without_dot": true,
"phpdoc_indent": true,
"phpdoc_inline_tag_normalizer": true,
"phpdoc_no_access": true,
"phpdoc_no_alias_tag": true,
"phpdoc_no_empty_return": true,
"phpdoc_no_package": true,
"phpdoc_no_useless_inheritdoc": true,
"phpdoc_order": true,
"phpdoc_order_by_value": true,
"phpdoc_return_self_reference": true,
"phpdoc_scalar": true,
"phpdoc_separation": true,
"phpdoc_single_line_var_spacing": true,
"phpdoc_summary": true,
"phpdoc_tag_type": true,
"phpdoc_to_comment": true,
"phpdoc_trim": true,
"phpdoc_trim_consecutive_blank_line_separation": true,
"phpdoc_types": true,
"phpdoc_types_order": true,
"phpdoc_var_annotation_correct_order": true,
"phpdoc_var_without_name": true,
"protected_to_private": true,
"return_assignment": true,
"return_type_declaration": true,
"semicolon_after_instruction": true,
"short_scalar_cast": true,
"simple_to_complex_string_variable": true,
"single_blank_line_at_eof": true,
"single_class_element_per_statement": true,
"single_import_per_statement": true,
"single_line_after_imports": true,
"single_line_comment_spacing": true,
"single_line_comment_style": true,
"single_quote": true,
"single_space_after_construct": true,
"single_trait_insert_per_statement": true,
"space_after_semicolon": true,
"standardize_increment": true,
"standardize_not_equals": true,
"switch_case_semicolon_to_colon": true,
"switch_case_space": true,
"switch_continue_to_break": true,
"ternary_operator_spaces": true,
"ternary_to_null_coalescing": true,
"trailing_comma_in_multiline": true,
"trim_array_spaces": true,
"types_spaces": true,
"unary_operator_spaces": true,
"visibility_required": true,
"whitespace_after_comma_in_array": true,
"yoda_style": {
"always_move_variable": true
}
}
}
12 changes: 6 additions & 6 deletions resources/css/filament-nested-list.css
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
/*
.nested-sort {
@apply p-0;
}

*/
.nested-sort--enabled li {
@apply cursor-move;
@apply hover:cursor-move;
}

/*
.nested-sort li {
@apply mt-0 mb-0 mr-5 p-2 bg-gray-200 dark:bg-gray-800/50;
@apply mr-5 p-2;
}
.nested-sort li ol {
@apply p-0 mt-5;
}

/* ns-dragged is the class name of the item which is being dragged */
*/
.nested-sort .ns-dragged {
@apply border border-danger-500;
}

/* ns-targeted is the class name of the item on which the dragged item is hovering */
.nested-sort .ns-targeted {
@apply border border-success-500;
}
2 changes: 1 addition & 1 deletion resources/dist/filament-nested-list.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions resources/dist/filament-nested-list.js

Large diffs are not rendered by default.

Loading

0 comments on commit 2ee01e2

Please sign in to comment.