Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions components/bl-list-component/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# List

List is the component that can be used in Backendless [UI-Builder](https://backendless.com/developers/#ui-builder). It allows you to add a standard list to your application. Select the type of list (ordered/unordered) and specify the data that will be displayed inside the list.
More information about list you can find [here](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li).

<p align="center">
<img src="./thumbnail.png" alt="main thumbnail" width="780"/>
</p>

## Properties

| Property | Type | Default value | Logic | Data Binding | UI Setting | Description |
|------------|----------------------------|---------------|-----------------|--------------|------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Type | *Select* <br> [`ul`, `ol`] | `ul` | Type Logic | NO | YES | Controls the type of list(ul/ol). |
| Items List | *JSON* | `[]` | ListItems Logic | YES | NO | Specifies a JSON array containing data of the list items. Watch [Codeless Examples] (#Examples). Signature of items list: [ <Item> ]. Signature of item: { content: String, children: [ <Item> ] }. |
Comment thread
v-excelsior marked this conversation as resolved.
Outdated
| Background | *Color* | | | NO | YES | Controls the background color of the main block. |
| Width | *Text* | | | NO | YES | Controls the width of the main block. |
| Color | *Color* | | | NO | YES | Controls the color of the list items. |
| Font Size | *Text* | | | NO | YES | Controls the font size of the list items. |
| Padding | *Text* | | | NO | YES | Controls the padding of the list items. |

## Events

| Name | Triggers | Context Blocks |
|---------------------------|--------------------------------------------------------|----------------|
| On Click List Item | when the user click any item of the list | `List Item` |

## Styles

**Theme**
````
@bl-customComponent-list-theme: @themePrimary;
@bl-customComponent-list-themeTextColor: @appTextColor;
````

**Dimensions**
```
@bl-customComponent-list-item-fontSize: 1rem;
```

## Examples

Below is a Codeless Example highlighting how to use the List component:

![list data example](example-images/list-data-example.png)
![list data example view](example-images/list-data-example-view.png)
Comment thread
v-excelsior marked this conversation as resolved.
106 changes: 106 additions & 0 deletions components/bl-list-component/component.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
{
"id": "c_f95c74e56529269bdafe747715db7bbe",
"name": "List",
"description": "The List component allows the user to add a standard list to an application.",
"showInToolbox": true,
"faIcon": "list",
"mainJS": "dist/index.js",
"type": "custom",
"category": "Custom Components",
"properties": [
{
"type": "select",
Comment thread
v-excelsior marked this conversation as resolved.
"name": "type",
"label": "Type",
"showInSettings": true,
"defaultValue": "ul",
"hasLogicHandler": false,
"handlerId": "typeLogic",
"options": [
{
"value": "ul",
"label": "Unordered"
},
{
"value": "ol",
"label": "Ordered"
}
],
"handlerLabel": "Type Logic",
"settingTooltip": "Select a list type"
},
{
"type": "json",
"name": "listItems",
"showInSettings": false,
Comment thread
Valodya marked this conversation as resolved.
Outdated
"hasLogicHandler": true,
"handlerId": "listItemsLogic",
"handlerLabel": "List Items Logic",
"dataBinding": true,
"defaultValue": "[]",
"handlerDescription": "Specifies a JSON array containing data of the list items. Signature of items list: [ <Item> ]. Signature of item: { content: String, children: [ <Item> ] }."
},
{
"type": "color",
"name": "backgroundColor",
"label": "Background",
"showInSettings": true,
"hasLogicHandler": false,
"handlerId": "backgroundColorLogic",
"settingTooltip": "Choose a background for the list"
},
{
"type": "text",
"name": "width",
"label": "Width",
"showInSettings": true,
"hasLogicHandler": false,
"handlerId": "widthLogic",
"settingTooltip": "Choose the width of the list"
},
{
"type": "color",
"name": "color",
"label": "Color",
"showInSettings": true,
"hasLogicHandler": false,
"handlerId": "colorLogic",
"settingTooltip": "Select the text color of the list items"
},
{
"type": "text",
"name": "fontSize",
"label": "Font Size",
"showInSettings": true,
"hasLogicHandler": false,
"handlerId": "fontSizeLogic",
"settingTooltip": "Select the font size of the list items"
},
{
"type": "text",
"name": "padding",
"label": "Padding",
"settingTooltip": "Select the padding for list items",
"showInSettings": true,
"hasLogicHandler": false,
"handlerId": "paddingLogic"
}
],
"eventHandlers": [
{
"name": "onClickListItem",
"label": "On Click List Item Event",
"contextBlocks": [
{
"id": "item",
"label": "List Item"
}
],
"handlerDescription": "This event is fired when the user clicks the mouse or taps the item of the list."
}
],
"actions": [],
"settings": [],
"pods": {},
"blockUI": "<div data-module-type=\"system\" data-module-id=\"paragraph\" data-display data-uid=\"26ee0bea5794136c571887825e151d79\"><ul><li data-display=\"\" style=\"margin-bottom:10px;\">unordered lists ( ul ) - the list items are marked with bullets</li><li data-display=\"\">ordered lists ( ol ) - the list items are marked with numbers or letters</li></ul></div>"
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions components/bl-list-component/preview.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div data-module-type="system" data-module-id="paragraph" data-display data-uid="26ee0bea5794136c571887825e151d79"><ul><li data-display="" style="margin-bottom:10px;">unordered lists ( ul ) - the list items are marked with bullets</li><li data-display="">ordered lists ( ol ) - the list items are marked with numbers or letters</li></ul></div>
28 changes: 28 additions & 0 deletions components/bl-list-component/src/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { List } from "./list";

const { cn } = BackendlessUI.CSSUtils;

export default function ListComponent({ component, eventHandlers }) {
const { classList, width, backgroundColor, type, listItems, color, fontSize, padding } = component;
Comment thread
v-excelsior marked this conversation as resolved.
Outdated

const onClickHandler = (e, key) => {
Comment thread
v-excelsior marked this conversation as resolved.
Outdated
e.stopPropagation();
Comment thread
v-excelsior marked this conversation as resolved.
Outdated
eventHandlers.onClickListItem({ item: key });
};

Comment thread
v-excelsior marked this conversation as resolved.
const options = {
type: type && type === "ol" ? "ol" : "ul",
style: {
color: color,
fontSize: fontSize,
padding: padding,
},
Comment thread
v-excelsior marked this conversation as resolved.
Outdated
onClickHandler: onClickHandler,
};

return (
<div className={cn("bl-customComponent-list", classList)} style={{ width, backgroundColor }}>
<List options={options} items={listItems} />
</div>
);
}
23 changes: 23 additions & 0 deletions components/bl-list-component/src/list.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
export function List({ options, items }) {
const ComponentType = options.type;

return (
<ComponentType className="list">
{items?.map((item, i) => (
Comment thread
v-excelsior marked this conversation as resolved.
Outdated
<Item item={item} key={i} options={options} />
Comment thread
v-excelsior marked this conversation as resolved.
Outdated
))}
</ComponentType>
);
}

function Item(props) {
const { options, item, key } = props;
const { style, onClickHandler } = options;
Comment thread
Valodya marked this conversation as resolved.
Outdated

return (
<li key={key} className="list__item" style={style} onClick={(e) => onClickHandler(e, item)}>
{item.content}
{item.children && <List items={item.children} options={options} />}
</li>
);
}
19 changes: 19 additions & 0 deletions components/bl-list-component/styles/index.less
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
@bl-customComponent-list-theme: @themePrimary;
@bl-customComponent-list-themeTextColor: @appTextColor;

@bl-customComponent-list-item-fontSize: 1rem;

.bl-customComponent-list {
color: @bl-customComponent-list-themeTextColor;
user-select: none;
Comment thread
v-excelsior marked this conversation as resolved.
Outdated

.list {

&__item {
Comment thread
Valodya marked this conversation as resolved.
Outdated
font-size: @bl-customComponent-list-item-fontSize;
padding: @bl-customComponent-list-item-fontSize / 2;
Comment thread
v-excelsior marked this conversation as resolved.
Outdated
line-height: 1.3;
Comment thread
v-excelsior marked this conversation as resolved.
Outdated
cursor: pointer;
}
}
}
Binary file added components/bl-list-component/thumbnail.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.