Skip to content

Instantly share code, notes, and snippets.

@Mlocik97
Last active September 17, 2022 21:25
Show Gist options
  • Save Mlocik97/ad6862b6a604f2cd7529acd4304bdcf9 to your computer and use it in GitHub Desktop.
Save Mlocik97/ad6862b6a604f2cd7529acd4304bdcf9 to your computer and use it in GitHub Desktop.
Compare SvelteKit `use:enhance` APIs
Type Old enhance Today's enhance Proposal
Simple result - script
<script>
	const result = ({ form }) => form.reset();
</script>

<form use:enhance={{ result }}></form>
<script>
	function add({ form }) {
		return (result) => {
			if (result.type === 'success') {
				form.reset();
				invalidateAll();
			}
		};
	}
</script>

<form use:enhance={add}></form>
<script>
	function result({ form, result }) {
		if (result.type === 'success') {
			form.reset();
			invalidateAll();
		}
	}
</script>

<form use:enhance={{ result }}></form>
Simple result - inline
<form use:enhance={{
    result: ({ form }) => form.reset()
}}>

</form>
<form use:enhance={({ form }) => {
	return ({ type }) => {
      	if (type === 'success') {
			invalidateAll();
			form.reset();
		}
	};
}}>

</form>
<form use:enhance={{
	result: ({ form, result }) => {
		if (result.type === 'success') {
			form.reset();
			invalidateAll();
		}
	}
}}>

</form>
Simple pending - script
<script>
	const pending = ({ form, data }) => todo.done = !!data.get('done');
</script>

<form use:enhance={{ pending }}></form>
<script>
	const pending = ({ form, data }) => todo.done = !!data.get('done');
</script>

<form use:enhance={pending}></form>
<script>
	const pending = ({ form, data }) => todo.done = !!data.get('done');
</script>

<form use:enhance={{ pending }}></form>
Simple result - inline
<form use:enhance={{
    pending: ({ form, data }) => todo.done = !!data.get('done');
}}>

</form>
<form use:enhance={({ form, data }) => todo.done = !!data.get('done')}>

</form>
<form use:enhance={{
	pending: ({ form, data }) => todo.done = !!data.get('done');
}}>

</form>
Pending, Result combined - script
<script>
	const result = ({ form }) => form.reset();
	const pending = ({ form, data }) => todo.done = !!data.get('done');
</script>

<form use:enhance={{ result, pending }}></form>
<script>
	function add({ form, data }) {
		todo.done = !!data.get('done');
		return (result) => {
			if (result.type === 'success') {
				form.reset();
				invalidateAll();
			}
		};
	}
</script>

<form use:enhance={add}></form>
<script>
	function result({ form, result }) {
		if (result.type === 'success') {
			form.reset();
			invalidateAll();
		}
	};
	const pending = ({ form, data }) => todo.done = !!data.get('done');
</script>

<form use:enhance={{ result, pending }}></form>
Pending, Result combined - inline
<form use:enhance={{
    result: ({ form }) => form.reset(),
	pending: ({ form, data }) => todo.done = !!data.get('done');
}}>

</form>
<form use:enhance={({ form }) => {
	// pending code on this line
	return ({ type }) => {
      	if (type === 'success') {
			invalidateAll();
			form.reset();
		}
	};
}}>

</form>
<form use:enhance={{
	result: ({ form, result }) => {
		if (result.type === 'success') {
			form.reset();
			invalidateAll();
		}
	},
	pending: ({ form, data }) => todo.done = !!data.get('done');
}}>

</form>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment