Skip to content

Instantly share code, notes, and snippets.

View freddi301's full-sized avatar

Frederik Batuna freddi301

View GitHub Profile
@freddi301
freddi301 / build.gradle
Last active February 15, 2024 13:49
Liferay workspace adapt react app portlet
apply plugin: 'maven-publish'
/*
* Fix NodeJS version
*/
node.nodeVersion="20.11.1"
node.npmVersion="10.2.4"
/*
* Fix for artifact deploy
@freddi301
freddi301 / web-accessibility.txt
Last active February 8, 2024 09:53
Web Accessibility checklist
- check with browser plugin "wave" and "axe" also chrome lighthouse accesibility
open chrome inspect element and see the accesibility tree
- generally copy accessibility from mui.com components
- banner role (first <header> in page) should contain title, logo, optionally nav
- contentinfo role (first <footer> in page)
- <main/> (ensure there is only one so that user can skip over heading and sides to most important content)
- <aside/>
@freddi301
freddi301 / useGeolocation.ts
Last active February 7, 2024 10:15
React hook for geolocation
import React from "react";
export function useGeolocation({
isEnabled,
positionOptions: { enableHighAccuracy, maximumAge, timeout },
startTransition,
}: {
isEnabled: boolean;
positionOptions: PositionOptions;
startTransition?(update: () => void): void;
@freddi301
freddi301 / useDomSize.tsx
Created September 15, 2023 08:53
React hook to measure an element before rendering it
/**
* React hook to measure an element before rendering it
* given some jsx it renders it in a hidden div then measures its size
* the hook returns width and height and portal
* @important the portal must be in the page to be able to render the hidden div for measurements
* @warning the jsx will be renred probably twice, once for measurement, and where you actually use it
*/
export function useDomSize(children: JSX.Element) {
const [width, setWidth] = React.useState(0);
const [height, setHeight] = React.useState(0);
@freddi301
freddi301 / configuration.json
Last active January 17, 2024 15:03
Liferay React Portlet TypeScript integration
// this files goes to feature/configuration.json
// it lets you setup configuration fields for a portlet
// it work with an adapted create-react-app for liferay https://help.liferay.com/hc/en-us/articles/360035467712-Adapting-Existing-Apps-to-Run-on-Liferay-DXP
{
"$schema": "https://raw.githubusercontent.com/liferay/liferay-js-toolkit/master/resources/schemas/configuration.schema.json",
"system": {
"category": "react-js-toolkit",
"name": "react-js-toolkit",
"fields": {
"fruit": {
@freddi301
freddi301 / setup
Last active January 24, 2024 10:49
MSW configuration for create-react-app
import { setupWorker } from 'msw/browser'
// https://mswjs.io/docs/best-practices/typescript
// also ensure there is .env or env.local file
// with PUBLIC_URL=index set to something otherwise chrome wont load the mock service worker
const worker = setupWorker(/* here goes handlers */);
if (process.env.NODE_ENV === "development") {
@freddi301
freddi301 / useValueWithTimeToLive.ts
Created May 5, 2023 08:30
useValueWithTimeToLive
function useValueWithTimeToLive<T>() {
const [state, setState] = React.useState<{ value: T | undefined; timeToLive: number | undefined }>({
value: undefined,
timeToLive: undefined,
});
const setValueWithTimeToLive = React.useCallback((value: T, timeToLive: number) => {
setState({ value, timeToLive });
}, []);
React.useEffect(() => {
if (state.timeToLive !== undefined) {
@freddi301
freddi301 / moveItem.tsx
Last active December 20, 2022 14:48
Move item in array for drag drop reordering
function moveItem<T>(fromIndex: number, toIndex: number, array: Array<T>): Array<T> {
if (fromIndex < toIndex) {
return [...array.slice(0, fromIndex), ...array.slice(fromIndex + 1, toIndex + 1), array[fromIndex], ...array.slice(toIndex + 1)];
}
if (fromIndex > toIndex) {
return [...array.slice(0, toIndex), array[fromIndex], ...array.slice(toIndex, fromIndex), ...array.slice(fromIndex + 1)];
}
return array;
}
@freddi301
freddi301 / Frederik-Batuna-CV.md
Last active August 4, 2022 08:48
Frederik Batuna Curriculum Vitae

Frederik Batuna

freddi301

Senior Front-End engineer with high focus on best-practices, productivity enhancement and cutting-edge technologies (mainly ReactJS related).

I have also experience as Full-Stack engineer with Back-End (nodejs, sql, mongo) and CI/CD (heroku, docker, github)

I like to experiment, learn and keep myself up to date with software development technologies.

@freddi301
freddi301 / incremental-behaviours.idr
Created February 7, 2022 15:19
Incremental Behaviours
module IncrementalBehaviors
-- esempio di una prova per induzione
-- è una funzione
-- dato qualsiasi x che è un booleano
-- ritorna una equality (che sarebbe una struttra dati, leggasi new Equality(x, not(not(x))))
-- il tipo di questa funzione è la nostra ipotesi
-- se si riesce a scrivere il corpo della funzione rispettando il tipo di ritorno
-- si ottiene la prova per induzione che l'ipotesi è corretta
example : (x : Bool) -> x = not (not x)