Skip to content

Instantly share code, notes, and snippets.

@davidmuzi
davidmuzi / settings.json
Created October 19, 2021 14:55
VSCode settings
{
"workbench.colorTheme": "Stripe Docs Blue",
"telemetry.enableTelemetry": false,
"terminal.integrated.fontFamily": "Hack Nerd Font Mono",
"terminal.integrated.fontSize": 13,
"terminal.integrated.fontWeight": 1000,
"editor.fontWeight": 500,
"editor.fontSize": 13,
"editor.fontFamily": "Jetbrains Mono",
"editor.fontLigatures": true,
@davidmuzi
davidmuzi / ShopifyAuth.swift
Last active May 16, 2020 01:27
Authenticate to Shopify using OAuth with ASWebAuthenticationSession
//
// ShopifyAuth.swift
//
// Created by David Muzi on 2020-05-15.
//
// https://shopify.dev/tutorials/authenticate-with-oauth
import AuthenticationServices
struct ShopifyAuth {
@davidmuzi
davidmuzi / button.java
Created September 22, 2017 00:36
Android button handler
private void onButtonClick(EmbeddedAppButton button) {
if (button.hasRoutableHref()) {
Router.getInstance().launch(getShopifyActivity(), button.getHref());
} else {
String script = "this[\"__extension\"].send(\"" + button.getPostMessage() + "\");";
webView.evaluateJavascript(script, value -> {});
}
}
@davidmuzi
davidmuzi / button.swift
Created September 22, 2017 00:35
iOS action handler
func perform(actionable: EmbeddedAppButtonActionable) {
switch self {
case .load(let href, let target):
guard let url = actionable.currentURL,
let request = target.request(targetLink: href, baseUrl: url) else { return }
guard let requestUrl = request.url, actionable.openRoute(targetURL: requestUrl) else {
actionable.load(request: request)
return
}
@davidmuzi
davidmuzi / android.java
Created September 22, 2017 00:35
Android bridge
@JavascriptInterface
public void setPrimaryButton(String json) {
if (isValidString(json)) {
handler.post(() -> delegate.removePrimaryButton());
} else {
handler.post(() -> delegate.setPrimaryButton(json));
}
}
@davidmuzi
davidmuzi / android.js
Created September 22, 2017 00:34
Android JS File
const Mobile = {
setPrimaryButton: function(data) {
Android.setPrimaryButton(JSON.stringify(data));
},
setSecondaryButtons: function(data) {
Android.setSecondaryButtons(JSON.stringify(data));
},
@davidmuzi
davidmuzi / ios.swift
Created September 22, 2017 00:33
Swift bridge
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
guard let type = EmbeddedAppMessageType(rawValue: message.name) else { return }
switch type {
case .setTitle:
let title = message.body as? String
setTitle(title: title)
case .loadingOn:
startActivityIndicator(start: true)
@davidmuzi
davidmuzi / iOS.js
Last active September 28, 2017 18:00
IOS JS snippet
const Mobile = {
setLoadingOn: function() {
window.webkit.messageHandlers.loadingOn.postMessage(null)
},
setLoadingOff: function() {
window.webkit.messageHandlers.loadingOff.postMessage(null)
},
setTitle: function(title) {
if (!this['__extension']) {
this['__extension'] = Shopify.EmbeddedApp.extend({
'Shopify.API.Bar.loading.on': function(data, next) {
Mobile.setLoadingOn();
},
'Shopify.API.Bar.loading.off': function(data, next) {
Mobile.setLoadingOff();
},