View ImmutableCounter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class ImmutableCounter { | |
private final int counter; | |
public ImmutableCounter(int num) { | |
this.counter = num; | |
} | |
public int getCount() { | |
return this.counter; | |
} |
View ImmutableDemo.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.HashMap; | |
// This class is broken, follow the TODOs | |
public class ImmutableDemo { | |
// TODO: How to prevent external actors from accessing the map directly? | |
public HashMap<String,String> map; | |
public ImmutableDemo() { | |
this.map = new HashMap<String, String>(); | |
this.map.put("Important", "OKAY"); |
View repo_test.exs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule Super.RepoTest do | |
use Super.DataCase, async: true | |
require Logger | |
@skipped_schemas [UserService.User] | |
defp tenant_schemas do | |
{:ok, mods} = :application.get_key(:super, :modules) | |
Enum.map(mods, fn mod -> |
View utm-enhance.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var links = document.getElementsByTagName('a'); | |
var params = new URLSearchParams(window.location.search); | |
var utmParams = {}; | |
params.forEach(function (val, name) { | |
if (name.startsWith('utm_')) { | |
utmParams[name] = val; | |
} | |
}); |
View 1_hooks.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export const SpaceLayoutEditor = { | |
// Not important for the integration, just something for my specific use case | |
recentItems: [], | |
mounted() { | |
// IMPORTANT LINE: LiveView -> React data flow | |
this.handleEvent("react.update_items", ({ items }: { items: string }) => { | |
const newItems: SpaceItem[] = JSON.parse(items) | |
this.mountEditor(newItems) | |
}) |
View 1_hooks.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export const SpaceLayoutEditor = { | |
mounted() { | |
// I use webpack chunks to reduce LiveView entry file size | |
import(/* webpackChunkName: "space-layout-editor-lv" */ '../entry/space-layout-editor-lv').then((mounter) => { | |
this.unmountComponent = mounter.default(this.el.id, { | |
editorOpts: this.editorOpts() | |
}) | |
}).catch(console.error) | |
}, |
View hook-example.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* This example is just copy/pasted from my code base. The gist of it is that `this.pushEventTo` on the hook | |
* will send an event over the LiveView channel that is processed by the component/LiveView that's mounted at | |
* that element. | |
* | |
* I recommend using pushEventTo instead of pushEvent because I've run into situations where the event gets sent | |
* to the incorrect component or LiveView. | |
*/ | |
const GeneratePDFButton = { | |
mounted() { |
View notion.ex
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule Clove.Connections.Client.Notion do | |
# There is not a way to filter last_edited_time, so consumer should check if it needs to fetch the blocks or not | |
# This will help for deletion detection, though | |
def retrieve_pages(connection) do | |
request = %{ | |
method: :post, | |
url: "#{base_url()}/v1/search", | |
params: %{ | |
"query" => "", | |
"sort" => %{ |
View header.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<script type="text/javascript"> | |
if (window.top !== window.self) { | |
document.body.classList.add('in-iframe') | |
} | |
</script> |
View chartkick.ex
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule Chartkick do | |
@moduledoc """ | |
Adapted from https://github.com/buren/chartkick-ex/blob/master/lib/chartkick.ex to work with LiveView. | |
Works in conjunction with Phoenix LiveView hooks to render charts using Chartkick.js library. | |
""" | |
require EEx | |
gen_chart_fn = fn chart_type -> |
NewerOlder