Skip to content

Instantly share code, notes, and snippets.

View kirpalmakanga's full-sized avatar

Kirpal Makanga kirpalmakanga

View GitHub Profile
@kirpalmakanga
kirpalmakanga / is-equal.ts
Last active December 26, 2021 14:02
Check equality between two items
export const isEqual = (obj1: unknown, obj2: unknown) => {
type GenericObject = {
[key: string]: unknown;
};
function getType(obj: unknown) {
return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();
}
function areArraysEqual(arr1: unknown[], arr2: unknown[]) {
@kirpalmakanga
kirpalmakanga / onClickOutside.tsx
Created December 22, 2021 16:07
Helper to detect click outside of element
export const onClickOutside = (element: HTMLElement, callback: Function) => {
const handler = ({ target }: Event) => {
let currentElement = target;
do {
if (currentElement === element) {
return;
}
@kirpalmakanga
kirpalmakanga / ScrollContainer.tsx
Created October 19, 2021 17:55
Flex scroll container for Solid JS
import { Component } from 'solid-js';
import { HTMLElementEvent } from '../../@types/alltypes';
import { throttle } from '../lib/helpers';
interface Props {
className?: string;
children: any;
ref: (el: HTMLDivElement) => HTMLDivElement;
onScroll?: (e: HTMLElementEvent<HTMLDivElement>) => void;
onScrollEnd?: () => void;
@kirpalmakanga
kirpalmakanga / getStartOfQuarter.js
Last active August 10, 2021 11:30
Get date of intervals starts
const getStartOfQuarter = date => {
const
quarters = {
1: 1,
2: 4,
3: 7,
4: 10
},
d = date ? new Date(date) : new Date(),
q = Math.ceil((d.getMonth() + 1) / 3),
@kirpalmakanga
kirpalmakanga / mousePosition.js
Created May 11, 2020 20:39
Get mouse position
const out = document.querySelector('output');
const plaindiv = document.querySelector('div');
const absdiv = document.querySelector('div.absolute');
const floatdiv = document.querySelector('div.float');
const getposition = ev => {
let x = ev.clientX;
let y = ev.clientY;
let pos = ev.target.getBoundingClientRect();
return {
@kirpalmakanga
kirpalmakanga / stripScripts.js
Created March 3, 2020 09:58
Remove all script tags from html string
const stripScripts = (s) => {
const div = document.createElement('div');
div.innerHTML = s;
const scripts = div.querySelectorAll('script');
for (var script of scripts) {
script.parentNode.removeChild(script);
}
const getUrlParams = (url) => {
const { searchParams } = new URL(url);
return Object.fromEntries([...searchParams.entries()]);
};
@kirpalmakanga
kirpalmakanga / create-reducer.js
Created May 10, 2019 08:41
Little helper for reducer generation
const createReducer = (initialState = {}, handlers = {}) => (
state = {},
action = {}
) =>
handlers.hasOwnProperty(action.type)
? handlers[action.type](state, action)
: { ...initialState, ...state };
export default createReducer;
@kirpalmakanga
kirpalmakanga / google-auth
Last active July 16, 2019 22:49
Loading Google API and auth service
const API_URL = 'https://apis.google.com/js/api.js';
const GOOGLE_CLIENT_ID = '';
const GOOGLE_CLIENT_SCOPE = '';
function loadScript(src) {
return new Promise((resolve, reject) => {
try {
if (!document.querySelector(`script[src="${src}"]`)) {
@kirpalmakanga
kirpalmakanga / csv.js
Last active March 12, 2019 11:42
Client-side CSV export
function processRow(row, separator) {
let finalVal = "";
for (let j = 0; j < row.length; j++) {
let innerValue = row[j] === null ? "" : row[j].toString();
if (row[j] instanceof Date) {
innerValue = row[j].toLocaleString();
}