innoboxrr-react-datatable 2.0.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "innoboxrr-react-datatable",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Gemelo React de innoboxrr-vue-datatable: el mismo contrato de modelo, la misma tabla.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.js",
|
|
@@ -37,10 +37,11 @@
|
|
|
37
37
|
"node": ">=20"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
+
"@iconify/react": "^6.0.0",
|
|
40
41
|
"axios": "^1.7.0"
|
|
41
42
|
},
|
|
42
43
|
"peerDependencies": {
|
|
43
|
-
"innoboxrr-form-core": "^2.
|
|
44
|
+
"innoboxrr-form-core": "^2.2.0",
|
|
44
45
|
"react": "^19.0.0",
|
|
45
46
|
"react-dom": "^19.0.0",
|
|
46
47
|
"react-router-dom": "^7.0.0"
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { useSyncExternalStore } from 'react'
|
|
2
|
+
import { Icon } from '@iconify/react'
|
|
3
|
+
import { iconFor, onIconChange } from 'innoboxrr-form-core'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* El icono de una accion de la tabla.
|
|
7
|
+
*
|
|
8
|
+
* Antes cada componente pintaba `<span class="uk-icon" uk-icon="icon: fa-plus">`
|
|
9
|
+
* por su cuenta. Para que ese icono apareciera hacian falta tres dependencias
|
|
10
|
+
* que ningun package.json declaraba: uikit, fontawesome y uikit-custom-icons,
|
|
11
|
+
* que hacia de puente entre las dos.
|
|
12
|
+
*
|
|
13
|
+
* Ahora el nombre se resuelve contra el mapa de innoboxrr-form-core, el mismo
|
|
14
|
+
* que usa la rama Vue.
|
|
15
|
+
*
|
|
16
|
+
* @param {{ icon: string, ratio?: number }} props
|
|
17
|
+
*/
|
|
18
|
+
export default function DatatableIcon({ icon, ratio = 1 }) {
|
|
19
|
+
// useSyncExternalStore es la forma correcta de leer estado que vive fuera
|
|
20
|
+
// de React: un `setIcons()` en caliente repinta lo ya montado.
|
|
21
|
+
const resolved = useSyncExternalStore(
|
|
22
|
+
onIconChange,
|
|
23
|
+
() => iconFor(icon),
|
|
24
|
+
() => iconFor(icon)
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
// `ratio` era el multiplicador de UIkit sobre 16px. Se conserva para no
|
|
28
|
+
// romper a quien ya lo pasa.
|
|
29
|
+
const size = ratio * 16
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
<Icon
|
|
33
|
+
className="fe-mr-sm"
|
|
34
|
+
icon={resolved}
|
|
35
|
+
width={size}
|
|
36
|
+
height={size}
|
|
37
|
+
aria-hidden="true" />
|
|
38
|
+
)
|
|
39
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import DatatableIcon from './DatatableIcon.jsx'
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Gemelo de DisabledLinkComponent.vue: la acción que el usuario no puede
|
|
3
5
|
* ejecutar. Se sigue mostrando, deshabilitada, para que la interfaz no cambie
|
|
@@ -11,9 +13,10 @@ export default function DisabledLinkComponent({ icon = '', text }) {
|
|
|
11
13
|
href="#"
|
|
12
14
|
aria-disabled="true"
|
|
13
15
|
className="disabled-link block px-4 py-2 dark:hover:text-white dark:text-slate-400"
|
|
14
|
-
|
|
16
|
+
data-tooltip="This action is not authorized"
|
|
17
|
+
data-tooltip-pos="right"
|
|
15
18
|
onClick={(event) => event.preventDefault()}>
|
|
16
|
-
{showIcon ? <
|
|
19
|
+
{showIcon ? <DatatableIcon icon={icon} /> : null}
|
|
17
20
|
<span>{text}</span>
|
|
18
21
|
</a>
|
|
19
22
|
)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import DatatableIcon from './DatatableIcon.jsx'
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Gemelo de IconLinkComponent.vue.
|
|
3
5
|
*/
|
|
@@ -16,10 +18,7 @@ export default function IconLinkComponent({
|
|
|
16
18
|
href={link}
|
|
17
19
|
target={target}
|
|
18
20
|
onClick={onClick}>
|
|
19
|
-
<
|
|
20
|
-
className="fe-mr-sm uk-icon"
|
|
21
|
-
uk-icon={`icon: ${icon}; ratio: ${ratio};`}
|
|
22
|
-
style={{ fontSize: `${ratio * 16}px` }}></span>
|
|
21
|
+
<DatatableIcon icon={icon} ratio={ratio} />
|
|
23
22
|
<span className={textClass}>{text}</span>
|
|
24
23
|
</a>
|
|
25
24
|
)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Link } from 'react-router-dom'
|
|
2
2
|
import { buildPath } from '../routes.js'
|
|
3
|
+
import DatatableIcon from './DatatableIcon.jsx'
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Gemelo de IconRouteComponent.vue.
|
|
@@ -23,10 +24,7 @@ export default function IconRouteComponent({
|
|
|
23
24
|
<Link
|
|
24
25
|
to={buildPath(name, params, query)}
|
|
25
26
|
className="block px-4 py-2 dark:hover:text-white dark:text-slate-400">
|
|
26
|
-
<
|
|
27
|
-
className="fe-mr-sm uk-icon"
|
|
28
|
-
uk-icon={`icon: ${icon}; ratio: ${ratio};`}
|
|
29
|
-
style={{ fontSize: `${ratio * 16}px` }}></span>
|
|
27
|
+
<DatatableIcon icon={icon} ratio={ratio} />
|
|
30
28
|
<span className={textClass}>{text}</span>
|
|
31
29
|
</Link>
|
|
32
30
|
)
|