Skip to content

Commit dc2213e

Browse files
authored
Merge pull request #877 from IgniteUI/gedinakova/tile-manager-samples
Adding new Tile Manager samples
2 parents 09875b3 + aa77c94 commit dc2213e

71 files changed

Lines changed: 2485 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// https://www.robertcooper.me/using-eslint-and-prettier-in-a-typescript-project
2+
module.exports = {
3+
parser: "@typescript-eslint/parser", // Specifies the ESLint parser
4+
parserOptions: {
5+
ecmaVersion: 2020, // Allows for the parsing of modern ECMAScript features
6+
sourceType: "module", // Allows for the use of imports
7+
ecmaFeatures: {
8+
jsx: true // Allows for the parsing of JSX
9+
}
10+
},
11+
settings: {
12+
react: {
13+
version: "999.999.999" // Tells eslint-plugin-react to automatically detect the version of React to use
14+
}
15+
},
16+
extends: [
17+
"eslint:recommended",
18+
"plugin:react/recommended", // Uses the recommended rules from @eslint-plugin-react
19+
"plugin:@typescript-eslint/recommended" // Uses the recommended rules from @typescript-eslint/eslint-plugin
20+
],
21+
rules: {
22+
// Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs
23+
"default-case": "off",
24+
"no-undef": "off",
25+
"no-unused-vars": "off",
26+
"no-extend-native": "off",
27+
"no-throw-literal": "off",
28+
"no-useless-concat": "off",
29+
"no-mixed-operators": "off",
30+
"no-prototype-builtins": "off",
31+
"prefer-const": "off",
32+
"prefer-rest-params": "off",
33+
"jsx-a11y/alt-text": "off",
34+
"jsx-a11y/iframe-has-title": "off",
35+
"@typescript-eslint/no-unused-vars": "off",
36+
"@typescript-eslint/no-explicit-any": "off",
37+
"@typescript-eslint/no-inferrable-types": "off",
38+
"@typescript-eslint/no-useless-constructor": "off",
39+
"@typescript-eslint/no-use-before-define": "off",
40+
"@typescript-eslint/no-non-null-assertion": "off",
41+
"@typescript-eslint/interface-name-prefix": "off",
42+
"@typescript-eslint/prefer-namespace-keyword": "off",
43+
"@typescript-eslint/explicit-function-return-type": "off",
44+
"@typescript-eslint/explicit-module-boundary-types": "off"
45+
},
46+
"overrides": [
47+
{
48+
"files": ["*.ts", "*.tsx"],
49+
"rules": {
50+
"default-case": "off",
51+
"no-undef": "off",
52+
"no-unused-vars": "off",
53+
"no-extend-native": "off",
54+
"no-throw-literal": "off",
55+
"no-useless-concat": "off",
56+
"no-mixed-operators": "off",
57+
"no-prototype-builtins": "off",
58+
"prefer-const": "off",
59+
"prefer-rest-params": "off",
60+
"jsx-a11y/alt-text": "off",
61+
"jsx-a11y/iframe-has-title": "off",
62+
"@typescript-eslint/no-unused-vars": "off",
63+
"@typescript-eslint/no-explicit-any": "off",
64+
"@typescript-eslint/no-inferrable-types": "off",
65+
"@typescript-eslint/no-useless-constructor": "off",
66+
"@typescript-eslint/no-use-before-define": "off",
67+
"@typescript-eslint/no-non-null-assertion": "off",
68+
"@typescript-eslint/interface-name-prefix": "off",
69+
"@typescript-eslint/prefer-namespace-keyword": "off",
70+
"@typescript-eslint/explicit-function-return-type": "off",
71+
"@typescript-eslint/explicit-module-boundary-types": "off"
72+
}
73+
}
74+
]
75+
};
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<!-- NOTE: do not change this file because it's auto re-generated from template: -->
2+
<!-- https://github.com/IgniteUI/igniteui-react-examples/tree/vnext/templates/sample/ReadMe.md -->
3+
4+
This folder contains implementation of React application with example of Overview feature using [TileManager](https://www.infragistics.com/products/ignite-ui-react/react/components/layouts/tile-manager.html) component.
5+
6+
7+
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
8+
<body>
9+
<a target="_blank" href="https://www.infragistics.com/products/ignite-ui-react/react/components/general-getting-started.html" rel="noopener noreferrer">
10+
<img height="40px" style="border-radius: 0rem" alt="View Docs" src="https://github.com/IgniteUI/igniteui-blazor-examples/raw/vnext/templates/sample/images/button-docs.png"/>
11+
</a>
12+
<a target="_blank" href="./src/index.tsx" rel="noopener noreferrer">
13+
<img height="40px" style="border-radius: 0rem; max-width: 100%;" alt="View Code" src="https://github.com/IgniteUI/igniteui-blazor-examples/raw/vnext/templates/sample/images/button-code.png"/>
14+
</a>
15+
<a target="_blank" href="https://www.infragistics.com/react-demos/samples/layouts/tile-manager/actions" rel="noopener noreferrer">
16+
<img height="40px" style="border-radius: 0rem; max-width: 100%;" alt="Run Sample" src="https://github.com/IgniteUI/igniteui-blazor-examples/raw/vnext/templates/sample/images/button-run.png"/>
17+
</a>
18+
<a target="_blank" href="https://codesandbox.io/s/github/IgniteUI/igniteui-react-examples/tree/master/samples/layouts/tile-manager/actions?fontsize=14&hidenavigation=1&theme=dark&view=preview&file=/src/index.tsx" rel="noopener noreferrer">
19+
<img height="40px" style="border-radius: 0rem; max-width: 100%;" alt="Run Sample" src="https://github.com/IgniteUI/igniteui-blazor-examples/raw/vnext/templates/sample/images/button-sandbox.png"/>
20+
</a>
21+
</body>
22+
</html>
23+
24+
## Branches
25+
26+
> **_NOTE:_** You should use [master](https://github.com/IgniteUI/igniteui-react-examples/tree/master) branch of this repository if you want to run samples on your computer. Use the [vnext](https://github.com/IgniteUI/igniteui-react-examples/tree/vnext) branch only when you want to contribute new samples to this repository.
27+
28+
## Instructions
29+
30+
Follow these instructions to run this example:
31+
32+
33+
```
34+
git clone https://github.com/IgniteUI/igniteui-react-examples.git
35+
git checkout master
36+
cd ./igniteui-react-examples
37+
cd ./samples/layouts/tile-manager/actions
38+
```
39+
40+
open above folder in VS Code or type:
41+
```
42+
code .
43+
```
44+
45+
In terminal window, run:
46+
```
47+
npm install --legacy-peer-deps
48+
npm run-script start
49+
```
50+
51+
Then open http://localhost:4200/ in your browser
52+
53+
54+
## Learn More
55+
56+
To learn more about **Ignite UI for React** components, check out the [React documentation](https://www.infragistics.com/products/ignite-ui-react/react/components/general-getting-started.html).
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{
2+
"name": "react-radio-group",
3+
"description": "This project provides example of Radio Group using Infragistics React components",
4+
"author": "Infragistics",
5+
"homepage": ".",
6+
"version": "1.4.0",
7+
"private": true,
8+
"scripts": {
9+
"start": "set PORT=4200 && react-scripts --max_old_space_size=10240 start",
10+
"build": "react-scripts --max_old_space_size=10240 build ",
11+
"test": "react-scripts test --env=jsdom",
12+
"eject": "react-scripts eject"
13+
},
14+
"dependencies": {
15+
"igniteui-dockmanager": "1.16.1",
16+
"igniteui-react": "19.0.3",
17+
"igniteui-react-core": "19.0.0",
18+
"react": "^18.2.0",
19+
"react-dom": "^18.2.0",
20+
"react-scripts": "^5.0.1",
21+
"tslib": "^2.4.0"
22+
},
23+
"devDependencies": {
24+
"@types/jest": "^29.2.0",
25+
"@types/node": "^18.11.7",
26+
"@types/react": "^18.0.24",
27+
"@types/react-dom": "^18.0.8",
28+
"react-app-rewired": "^2.2.1",
29+
"typescript": "^4.8.4",
30+
"worker-loader": "^3.0.8"
31+
},
32+
"browserslist": [
33+
">0.2%",
34+
"not dead",
35+
"not ie <= 11",
36+
"not op_mini all"
37+
]
38+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<title>Tile Manager Actions</title>
5+
<link href="https://static.infragistics.com/xplatform/css/samples/shared.v8.css" rel="stylesheet" />
6+
</head>
7+
<body>
8+
<div id="root"></div>
9+
</body>
10+
</html>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"infiniteLoopProtection": false,
3+
"hardReloadOnChange": false,
4+
"view": "browser"
5+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/* shared styles are loaded from: */
2+
/* https://static.infragistics.com/xplatform/css/samples */
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
import React from "react";
2+
import ReactDOM from "react-dom/client";
3+
import "./index.css";
4+
import "./layout.css";
5+
import { IgrTileManager, IgrTile, IgrIconButton, registerIconFromText } from "igniteui-react";
6+
import "igniteui-webcomponents/themes/light/bootstrap.css";
7+
8+
export default class Actions extends React.Component<any, any> {
9+
10+
constructor(props: any) {
11+
super(props);
12+
const northEast =
13+
'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#5f6368"><path d="m216-160-56-56 464-464H360v-80h400v400h-80v-264L216-160Z"/></svg>';
14+
registerIconFromText('north_east', northEast, 'material');
15+
const southWest =
16+
'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#5f6368"><path d="M200-200v-400h80v264l464-464 56 56-464 464h264v80H200Z"/></svg>';
17+
registerIconFromText('south_west', southWest, 'material');
18+
const more =
19+
'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#5f6368"><path d="M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z"/></svg>';
20+
registerIconFromText('more', more, 'material');
21+
const chart =
22+
'<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#5f6368"><path d="M640-160v-280h160v280H640Zm-240 0v-640h160v640H400Zm-240 0v-440h160v440H160Z"/></svg>';
23+
registerIconFromText('chart', chart, 'material');
24+
}
25+
26+
private onCustomOneClick = (event: React.MouseEvent) => {
27+
28+
const tile = (event.currentTarget as HTMLElement).closest('igc-tile');
29+
30+
if (tile) {
31+
tile.maximized = !tile.maximized;
32+
33+
const actionsSlot = tile.querySelector('[slot="actions"]') as HTMLElement;
34+
const currentBtn = event.currentTarget as HTMLElement;
35+
36+
if (currentBtn) {
37+
if (
38+
tile.maximized
39+
) {
40+
currentBtn.setAttribute('name', 'south_west');
41+
currentBtn.setAttribute('aria-label', 'collapse');
42+
43+
const chartBtn = document.createElement('igc-icon-button');
44+
chartBtn.classList.add('additional-action');
45+
chartBtn.setAttribute('slot', 'actions');
46+
chartBtn.setAttribute('variant', 'flat');
47+
chartBtn.setAttribute('collection', 'material');
48+
chartBtn.setAttribute('name', 'chart');
49+
chartBtn.setAttribute('aria-label', 'chart');
50+
51+
const moreBtn = document.createElement('igc-icon-button');
52+
moreBtn.classList.add('additional-action');
53+
moreBtn.setAttribute('slot', 'actions');
54+
moreBtn.setAttribute('variant', 'flat');
55+
moreBtn.setAttribute('collection', 'material');
56+
moreBtn.setAttribute('name', 'more');
57+
moreBtn.setAttribute('aria-label', 'more');
58+
59+
tile.append(chartBtn);
60+
tile.append(moreBtn);
61+
} else {
62+
currentBtn.setAttribute('name', 'north_east');
63+
currentBtn.setAttribute('aria-label', 'expand');
64+
65+
const additionalButtons =
66+
actionsSlot.parentElement?.querySelectorAll('.additional-action');
67+
additionalButtons?.forEach((btn) => btn.remove());
68+
}
69+
}
70+
}
71+
};
72+
73+
private onCustomTwoClick = (event: React.MouseEvent) => {
74+
const tile = (event.currentTarget as HTMLElement).closest('igc-tile');
75+
76+
if (tile) {
77+
tile.maximized = !tile.maximized;
78+
79+
const currentBtn = event.currentTarget as HTMLElement;
80+
81+
if (currentBtn) {
82+
if (
83+
tile.maximized
84+
) {
85+
currentBtn.setAttribute('name', 'south_west');
86+
currentBtn.setAttribute('aria-label', 'collapse');
87+
}
88+
else {
89+
currentBtn.setAttribute('name', 'north_east');
90+
currentBtn.setAttribute('aria-label', 'expand');
91+
}
92+
}
93+
}
94+
};
95+
96+
public render(): JSX.Element {
97+
return (
98+
<div className="container sample center">
99+
<IgrTileManager id="tile-manager1" columnCount={2} gap="20px">
100+
<IgrTile>
101+
<h3 slot="title">Default Actions</h3>
102+
<p>This tile has default actions and title.</p>
103+
</IgrTile>
104+
<IgrTile disableFullscreen>
105+
<h3 slot="title">No Fullscreen Action</h3>
106+
<p>Fullscreen is disabled via property.</p>
107+
</IgrTile>
108+
<IgrTile disableFullscreen disableMaximize>
109+
<h3 slot="title">Custom Actions</h3>
110+
<IgrIconButton id="customOne" onClick={this.onCustomOneClick} slot="actions" variant="flat" collection="material" name="north_east"
111+
aria-label="north_east"></IgrIconButton>
112+
<p>Replace the default actions with custom ones, and include extra actions when the tile is maximized.</p>
113+
</IgrTile>
114+
<IgrTile disableFullscreen disableMaximize>
115+
<IgrIconButton id="customTwo" onClick={this.onCustomTwoClick} slot="actions" variant="flat" collection="material"
116+
name="north_east" aria-label="north_east"></IgrIconButton>
117+
<p>Display only custom actions in the header.</p>
118+
</IgrTile>
119+
<IgrTile disableFullscreen disableMaximize>
120+
<h3 slot="title">Only title</h3>
121+
<p>Display only title in the header.</p>
122+
</IgrTile>
123+
<IgrTile disableFullscreen disableMaximize>
124+
<p>Content only.</p>
125+
</IgrTile>
126+
</IgrTileManager>
127+
</div>
128+
);
129+
}
130+
131+
}
132+
133+
// rendering above class to the React DOM
134+
const root = ReactDOM.createRoot(document.getElementById("root"));
135+
root.render(<Actions/>);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
igc-tile-manager {
2+
margin-bottom: 5px;
3+
}
4+
5+
igc-tile:nth-child(n + 3):nth-child(-n + 4)::part(actions) {
6+
padding: 13px 16px;
7+
}
8+
9+
igc-tile:nth-child(n+3)::part(header) {
10+
padding: 0px;
11+
}
12+
13+
igc-tile:nth-child(5)::part(header) {
14+
padding: 18px 0 18px 0;
15+
}
16+
17+
p, igc-tile:nth-child(3) h3, igc-tile:nth-child(5) h3 {
18+
margin-left: 20px;
19+
}
20+
21+
igc-tile:nth-last-child(1) p {
22+
margin-top: 30px;
23+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/// <reference types="react-scripts" />

0 commit comments

Comments
 (0)