|
@@ -2,76 +2,62 @@
|
|
|
import CodeExecutionModal from './CodeExecutionModal.svelte';
|
|
|
import Spinner from '$lib/components/common/Spinner.svelte';
|
|
|
|
|
|
- export let code_executions = [];
|
|
|
-
|
|
|
- let _code_executions = [];
|
|
|
-
|
|
|
- $: _code_executions = code_executions.reduce((acc, code_execution) => {
|
|
|
- let error = null;
|
|
|
- let output = null;
|
|
|
- let files = [];
|
|
|
- let status = 'PENDING';
|
|
|
-
|
|
|
- if (code_execution.result) {
|
|
|
- output = code_execution.result.output;
|
|
|
- if (code_execution.result.error) {
|
|
|
- status = 'ERROR';
|
|
|
- error = code_execution.result.error;
|
|
|
- } else {
|
|
|
- status = 'OK';
|
|
|
- }
|
|
|
- if (code_execution.result.files) {
|
|
|
- files = code_execution.result.files;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- acc.push({
|
|
|
- id: code_execution.id,
|
|
|
- name: code_execution.name,
|
|
|
- code: code_execution.code,
|
|
|
- language: code_execution.language || '',
|
|
|
- status: status,
|
|
|
- error: error,
|
|
|
- output: output,
|
|
|
- files: files
|
|
|
- });
|
|
|
- return acc;
|
|
|
- }, []);
|
|
|
+ export let codeExecutions = [];
|
|
|
|
|
|
let selectedCodeExecution = null;
|
|
|
let showCodeExecutionModal = false;
|
|
|
</script>
|
|
|
|
|
|
-<CodeExecutionModal bind:show={showCodeExecutionModal} code_execution={selectedCodeExecution} />
|
|
|
+<CodeExecutionModal bind:show={showCodeExecutionModal} codeExecution={selectedCodeExecution} />
|
|
|
|
|
|
-{#if _code_executions.length > 0}
|
|
|
+{#if codeExecutions.length > 0}
|
|
|
<div class="mt-1 mb-2 w-full flex gap-1 items-center flex-wrap">
|
|
|
- {#each _code_executions as code_execution}
|
|
|
+ {#each codeExecutions.map((execution) => {
|
|
|
+ let error = null;
|
|
|
+ let output = null;
|
|
|
+ let files = [];
|
|
|
+ let status = 'PENDING';
|
|
|
+
|
|
|
+ if (execution.result) {
|
|
|
+ output = execution.result.output;
|
|
|
+ if (execution.result.error) {
|
|
|
+ status = 'ERROR';
|
|
|
+ error = execution.result.error;
|
|
|
+ } else {
|
|
|
+ status = 'OK';
|
|
|
+ }
|
|
|
+ if (execution.result.files) {
|
|
|
+ files = execution.result.files;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return { id: execution.id, name: execution.name, code: execution.code, language: execution.language || '', status: status, error: error, output: output, files: files };
|
|
|
+ }) as execution (execution.id)}
|
|
|
<div class="flex gap-1 text-xs font-semibold">
|
|
|
<button
|
|
|
class="flex dark:text-gray-300 py-1 px-1 bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-xl max-w-96"
|
|
|
on:click={() => {
|
|
|
- selectedCodeExecution = code_execution;
|
|
|
+ selectedCodeExecution = execution;
|
|
|
showCodeExecutionModal = true;
|
|
|
}}
|
|
|
>
|
|
|
<div class="bg-white dark:bg-gray-700 rounded-full size-4">
|
|
|
- {#if code_execution.status == 'OK'}
|
|
|
+ {#if execution.status == 'OK'}
|
|
|
✅ <!-- Checkmark -->
|
|
|
- {:else if code_execution.status == 'ERROR'}
|
|
|
+ {:else if execution.status == 'ERROR'}
|
|
|
❌ <!-- X mark -->
|
|
|
- {:else if code_execution.status == 'PENDING'}
|
|
|
+ {:else if execution.status == 'PENDING'}
|
|
|
<Spinner className="size-4" />
|
|
|
{:else}
|
|
|
⁉️ <!-- Interrobang -->
|
|
|
{/if}
|
|
|
</div>
|
|
|
<div
|
|
|
- class="flex-1 mx-2 line-clamp-1 code-execution-name {code_execution.status == 'PENDING'
|
|
|
+ class="flex-1 mx-2 line-clamp-1 code-execution-name {execution.status == 'PENDING'
|
|
|
? 'pulse'
|
|
|
: ''}"
|
|
|
>
|
|
|
- {code_execution.name}
|
|
|
+ {execution.name}
|
|
|
</div>
|
|
|
</button>
|
|
|
</div>
|